vue.js知识点回顾

vue.js基本使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="sxl">
        <p>{{ msg }}</p>
    </div>
    
    <!-- 导入vue.js -->
    <script src="./vue.js"></script>

    <script>
        // 实例化一个vue
        new Vue ({
           el:'#sxl', 
           data:{
            msg:'第一个'
           }
        })

    </script>
</body>
</html>

 胡字语法基本使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="age">
    <p>{{ age }}</p>

    <p>{{ age + 10}}</p>
    </div>

    <script src="./vue.js"></script>

    <script>
       new Vue ({
        el:age,
        data:{
         age:20   
        }
       })

    </script>
</body>
</html>

v-text和v-html的使用:

 <!-- 遇到标签不解析,只当纯文本 -->
        <div v-text="msg"></div>
        <!-- 遇到标签会解析 -->
        <div v-html="msg"></div>

 v-on&medthods的使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div class="app">
        <button v-on:click="fn2">我是一个按钮</button>

    </div>

    <script src="./vue.js"></script>

  <Script>
    new Vue ({
        el:'.app',
    // vue中放方法的地方
    methods:{
        fn2(){

            alert('我是网页中弹出的内容')
        }
    }

    })

  </Script>
</body>
</html>

Vue.js 条件语句

条件判断

v-if

条件判断使用 v-if 指令:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- <div id="app">
        <h2> 关于全省ikun人数 </h2>
        <div v-if="ikun >= 1000"> 广东省ikun人数 </div>
        <div v-else-if="ikun >= 4000 "> 江西省ikun人数 </div>
        <div v-else-if="ikun >= 2000 "> 以及南昌ikun人数 </div>
        <div v-else>全省唯一ikun</div>
    </div>

    <script src="./vue.js"></script>
    
    <script>
        new Vue ({
            el:'#app',
            data:{
                ikun:2000

            }
        })

    </script> -->
    
        <div id="app">
        <h3>期末成绩奖励相关安排</h3>
        <div v-if="score >= 600"> 全班一起去旅游 </div>
        <div v-else-if="score >= 550"> 全班一起看电影 </div>
        <div v-else-if="score >= 300"> 奖励作业真题一套 </div>
        <div v-else-if="score >=80">一起回家种田</div>
        <div v-else>叫家长明天来一趟办公室</div>
        </div>
        <script src="./vue.js"></script>

        <script>
        new Vue({
        el:'#app',
        data:{
            score: 450
            } 
        })
        </script>
         <!-- 得到结果:期末成绩奖励相关安排
              奖励作业真题一套 -->
        
</body>
</html>

 v-if与v-for的区别:

<!-- V-show和v-if都可以用来控制标签的显示与隐藏

<标签V-show='布尔值'></标签>

<标签v-1f='布尔值'></标签>

当布尔值为true,他们就显示;当布尔值为false,他们就隐藏 -->

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <div v-if="display"> 我是由v-if控制的 </div>
        <div v-show="display"> 我是由v-show控制的 </div>
    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'#app',
            data:{
                display:true  //我是由v-if控制的
                             // 我是由v-show控制的

                // display:false //布尔值 false:将会隐藏
            }
        })
    </script>
   
</body>
</html>

 

 <!-- 【v-show】

    1.本质就是标签display设置为none,控制隐藏。只是基于cS5进行切换

    2.V-show有更高的初始渲染消耗

    3.V-show适合频繁切换的情况

    【v-if】

    1.动态的向D0M树内添加或者删除DOM元素

    2.v-1f有更高的切换消耗。

    3.v-1f适合运行条件很少改变的情况 -->

 v-for遍历数组:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- v-if语法 -->
    <!-- <标签 v-for='item in 数组'></标签> -->
    <div id="app">
        <button @click="add">在尾部添加一个元素</button>
        <ul>
            <!-- 第一个参数是元素,第二个参数是下标,与名字无关 -->
            <!-- 大多时候只是为了拿到元素,可能用不到下标 -->
            <li v-for="(item,index) in list">{{index}}-{{item}}</li>
            <!-- item、index默认参数 -->
            <!-- <li v-for="item in list">{{index}}-{{item}}</li> -->

        </ul>

    </div>

    <script src="./vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data:{
                list:['郭富城','刘德华','黎明','张学友']

            },
            methods:{
                add() {
                    this.list.push('浪少')

                }
            }

        })
    </script>
</body>
</html>

v-for遍历对象:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!-- v-for指令遍历对象 -->
    <!-- 语法:<标签 v-for="(val,key) in 对象"><标签/> -->
        <!--   <标签 v-for="val in 对象"><标签/> -->
    <div id="app">
        <ul>
            <!-- 对象有多少属性就会产生多少个标签 -->
            <li v-for="item in obj">{{ item }}</li>
            <!-- 第一个参数:属性值 第二个参数:属性名 -->
            <!-- 跟名字无关,也可以简写只拿属性值 -->
            <hr>
            <li v-for="(key,val) in obj">{{ key }}---{{ val }}</li>
        </ul>
    </div>

    <script src="./vue.js"></script>

    <script>
    new Vue({
        el:'#app',
        data:{
            obj:{
                age:19,
                name:'浪少',
                sex:'男',
                height:'175cm'
            }

        }
    })
    </script>
</body>
</html>

 v-for遍历数字:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 遍历数字(指定次数的循环) -->
        <h2>以下是指定数列</h2>
        <ul>
            <!-- num是1到9 -->
            <li v-for="num in 9"> {{ num }} </li>
        </ul>

    </div>

    <script src="./vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
    
        })

    </script>
</body>
</html>

 v-for中key的作用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- splice三个参数 分别是:下标从哪里开始删除 删除的数量 要添加的参数  -->
        <button @click="list.splice(1,0,{id:4,name:'大黄'})">添加的元素</button>
        <ul>
            <li v-for="item in list" :key="item.index">
                <input type="checkbox">
                <span>{{ item.name }}</span>
            </li>
        </ul>
    </div>
        <!-- 问题:每当勾选了小白以后,然后在下标1的位置添加了大黄,结果发现勾了大黄,没有勾小白
        原因:v-for会尝试最大限度的复用当前元素,导致状态绑定错乱
        解决:在v-for后加上一个key属性,key绑定这个数据的唯一值(一般是id,不能是字符串和数字类型) -->
    <script src="./vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data:{
                list:[
                    {id:1,name:'小红'},
                    {id:2,name:'小白'},
                    {id:3,name:'小花'},
                ]

            }
        })

    </script>
</body>
</html>

JSON转换 

01-json字符串和js字符串的关系

<script>

        // JSON与JS对象的关系

        // JSON是JS对象的字符串表示法,它使用文本表示一个JS对象的信息,本质是一个字符串

        // 这是一个对象

        var obj = {a:"hello", b:"world"};

        console.log(typeof(obj)); // object

       

        // 这是一个JSON字符串,本质是一个字符串

        var json = '{"a":"hello", "b":"world"}'

        console.log(typeof(json)); // string

       

    </script>

02-json与js对象互换

<script>

        // JSON与JS对象互换:

        // JSON.parse()方法 实现从JSON字符串转换为JS对象

        var obj = JSON.parse('{a:"hello",b:"world"}')

        console.log(obj);

        // JSON.stringify()方法 实现从JS对象转换为JSON字符串

        var json = JSON.stringify({a:"hello",b:"world"})

        console.log(json);

    </script>

存储数据

01-cookle:

        一、使用场景

        1、记住密码,下次自动登录

        2、记录用户浏览数据,进行商品(广告)推荐

        二 特点:

        1、cookie保存在浏览器端

        2、单个cookle保存的数据不能超过4kb

        3、cookie中的数据是以域名的形式进行区分的

        4、cookie中的数据是有过期时间的,超过时间数据会被浏览器自动删除

        5、cookie中的数据会随着请求被自动发送到服务器端

        三、

        由于cookie存储机制有很多缺点,HTML5不再使用它,转而使用改良后的WebStorage存储机制。(localStorage和sessionStorage)

 02-localStorage

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        // 1.什么是localstorage
        // 在HTML5中,新加入了一个localstorage特性,这个特性主要用来作为本地存储来使用。 
        // 它解决了cookie存储空间不足的问题,每条cookie的存储空间为4K,localstorage一般为5M。

        // 2.localStorage的生命周期
        // LocalStorage生命周期是永久,这意味着除非用户在显示在浏览器提供的UI上清除localStorage信息,
        // 否则这些信息将永久存在。 

        // 3.localstorage的局限
        // a.在IE8以上的IE版本才支持localstorage这个属性。
        // b.目前所有的浏览器中都会被localStorage的值类型限定为string类型,
        //   对我们日常比较常见的JSON对象类型需要一个转换。

        // 4.判断浏览器是否支持localstorage这个属性 
        if(window.localstorage){
           alert('浏览器支持localStorage')
        }

        // 5.localstorage的写入
        if(!window.localStorage){
            alert('浏览器不支持localstorage')
        }else{
            var storage = window.localStorage;
            // 写入a字段
            storage['a'] = 1;
            // 写入b字段 
            storage.b =2;
            // 写入c字段
            storage.setItem('c',3)

            console.log(typeof storage['a']); //string 
            console.log(typeof storage['b']); //string 
            console.log(typeof storage['c']); //string
        }
    </script>
</body>
</html>

03-SessionStorage的生命周期

SessionStorage生命周期为当前窗口或标签页,一旦窗口或标签页被永久关闭了

那么所有通过Session存储的数据也就被清空

计算属性:

1、计算属性的基本结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script>
        //计算属性:
        //可以在里面写一些计算逻辑的属性
        //他不像普通函数那样直接返回结果,而是经过一系列计算之后再返回结果
        //同时只要在它当中应用了data中的某个属性,当这个属性发生变化时,计算属性可以嗅探到这种变化,并自动执行
        //定义:要用的属性不存在,通过已有属性计算得来
        //使用:在computed,对象中定义计算属性,在页面中使用{方法名}来显示计算的结果

        // 基本结构
        new  Vue({
            el:'',

            // 数据
            data:{},

            // 方法属性:事件绑定,不用return,没有缓存
            methods:{},

            // 侦听器:侦听一个值的改变,不用返回值
            watch:{
                要侦听的数据(){}

            },

            // 计算属性(重视结果)
            // 必须有return,只求结果,有缓存
            computed:{
                计算属性名(){
                     // 经过一系列计算
                    return 处理操作后结果
                }
            }
            // 计算属性的缓存特性
            // 第一次调用计算机属性时,会产生一个结果,这个结果会被缓存起来,后面每次用到这个属性都是从缓存里取
            // 当它的依赖项发生改变,会重新计算得到一个结果,再缓存起来
        })
    </script>
</body>
</html>

 2、计算属性的基本使用:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <p>原始字符串:{{ message }}</p>
        <p>计算反转后的字符串:{{ reverseMessage }}</p>
        <p>将原字符串转为小写:{{ toLowerCase }}</p>
    </div>

    <script src="../vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data:{
                message:'ABCDEFG'
            },
            computed:{
                // 计算反转后的字符串
                reverseMessage:function(){
                    // split()把一个字符串切割成字符串数组
                    // reverse()颠倒数组中元素的顺序
                    // join() 把数组中的所有元素转换为一个新的字符串
                    return this.message.split('').reverse().join('')
                },

                // 将原数组转换为小写
                toLowerCase(){
                    // substring(from,to)提取字符串中介于两个指定下标之间的字符 
                    //  toLowerCase()用于把字符串转换为小写
                    return this.message.substring(0,7).toLowerCase()
                }
               
            }

        })
                // 将原字符串第一个元素转换为小写
                var str = "SMALL String";
                str = str.replace(str[0],str[0].toLowerCase());
                console.log(str); 
// 颠倒再连接
    </script>
</body>
</html>

 3、计算属性的完整结构

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <!--
    1、每一个计算属性都包含一个getter函数与setter函数
    2、计算属性会默认使用getter函数,setter函数并不常见,所以一般计算属性getter和setter都不写
    3、getter函数是默认用法,setter函数不是默认用法。如果要使用setter函数,必须手动写出setter函数
    4、setter函数内的形参是你要修改的值 
    -->
    <div id="app">
        性:<input type="text" v-model="lastName"> <br><br/>
        名:<input type="text" v-model="firstName"> <br><br/>
        全名:<span> {{ fullName }} </span>
        <button @click="btn"> 修改计算属性的值 </button> <br><br/>
    </div>

    <script src="../vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data(){
                return {
                    lastName:'江户川',
                    firstName:'柯南'
                }
            },
            computed:{
                fullName:{
                    // get:获取值触发
                    // 当有人读取fullName时,且返回值就作为fullName的值
                    get(){
                        return this.lastName + '-' + this.firstName
                    },
                    // set:设置值时会触发
                    // 当计算属被修改时调用set
                    set(value){
                        console.log('set',value);
                    }
                }
            },
                methods:{
                    btn(){
                        this.fullName = '工藤新一';
                    }
            }
        })

    </script>
</body>
</html>

修饰符: 

01-lazy

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 事件修饰符.lazy(懒惰) 不会及时的将输入框的内容存放在data -->
        <input v-model.lazy="msg">
        <span>{{msg}}</span>
    </div>

    <script src="../../vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data:{
                msg:123
            }

        })
    </script>
</body>
</html>

02-number 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- 修饰符.number 把string字符串转换为number数字 -->
        <input type="number" v-model.number="age">
        <span>{{age}}</span>
    </div>

    <script src="../../vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data:{
                age:''
            },
            watch:{
                age(){
                    console.log(typeof(this.age));
                }
            }

        })
    </script>
</body>
</html>

 03-trim

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <div id="app">
        <!-- .trim 屏蔽空格 -->
        <input type="text" v-model.trim="msg">  
        <span>一个{{ msg.length }} 字符</span>
    </div>

    <script src="../../vue.js"></script>

    <script>
        new Vue ({
            el:'#app',
            data:{
                msg:''
            }

        })
    </script>
</body>
</html>

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值