Vue相关知识点总结

一、Vue的基本使用

代码如下(示例):

<!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>{{ msg }}</p>
    </div>

    <!-- 下面这个div没有被vue管理 -->
    <div>
        <p>{{ msg }}</p>
    </div>

    <!-- 导入vue.js文件 -->
    <script src="./vue.js"></script>

    <script>
        // 实例化一个Vue
        new Vue ({
            // 找到某个盒子,并且把这个盒子里的内容交给Vue来管理
            // 它可以传入任何选择器,但是一般只用id选择器
            // el:'.box'
            el:"#app",
            //vue里面放数据的地方
            //可以理解为在这里声明的都是vue里的变量
            data:{
                msg:"马杀鸡"
            }
        })
    </script>
</body>
</html>

二、插值语法的使用

 双大括号标签会将其中的内容替换为对应数据对象上的 msg 属性的值,而且此插值会随着 msg 属性的改变而更新。

如果不想让插值更新,即插值处的值只执行一次,及时后台数据对象的值发生改变也不更新,可以使用v-once指令:

<span v-once> 这个将不会改变: {{ msg }} </span>

代码如下(示例):

<!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">
        <p>{{ age }}</p>
        <p>{{ age + 10 }}</p>
        <p>{{ age >= 18 }}</p>
        <p>{{ age >= 12 }}</p>
        <p>{{ age >= 18 ? '成年' : '未成年'}}</p>

        <p>{{ if(age >= 18){
        }
        </p>

    </div>

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

    <script>
        new Vue({
            el:'.app',
            data:{
                age:16
            }
        })
    </script>
</body>
</html>

三、V-Text的使用

更新元素的内容,如果要更新部分元素的内容则要用到{{Mustache}}插值。

他的写法是:<span>{{msg}}</span>

他的这个跟插值两个都差不多,但是写法不一样。

代码如下(示例):

<!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-text="msg"></div>
        <div v-html="msg"></div>

        <div>hello{{}}</div>

    </div>

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

    <script>
        new Vue({
            el:'#app',
            data:{
                msg:'你好'
            }
        })
    </script>
</body>
</html>

四、V-Model

v-model就是vue的双向绑定的指令,能将页面上控件输入的值同步更新到相关绑定的data属性,也会在更新data绑定属性时候,更新页面上输入控件的值。

v-model主要提供了两个功能,view层输入值影响data的属性值,data属性值发生改变会更新view层的数值变化。

代码如下(示例):

<!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">
        <!-- 输入框 -->
        <input type="text" v-model="msg">

        <!-- 下拉框 -->
    <select v-model="fruit">
        <option value="apple">苹果</option>
        <option value="Strawberry">草莓</option>
        <option value="watermelon">西瓜</option>
    </select>

        <!-- 单选框 -->
        <input type="checkbox" v-model="chk">

    </div>

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

    <script>
        new Vue({
            el:'#app',
            data:{
                msg:'',
                fruit:'Strawberry',
                chk:true,

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

五、生命周期

vue生命周期分为四个阶段
第一阶段(创建阶段):beforeCreate,created
在beforCreate之前
vue做了两件事:methos声明,生命周期钩子函数声明
在创建阶段
data数据注入,data数据劫持
1.遍历递归data选项,给每个声明式变量添加setter/getter
2.把劫持过变量都放在组件实例上
第二阶段(挂载阶段):beforeMount,mounted
在beforeMount之前
会寻找是否有template/el的模板,组件的试图模板(带有指令的HTML字符串)
把找到的template视图(带有指令的HTML字符串),编译成render()渲染函数
在挂载阶段
vue做了下面的事(vue引擎第一次工作)
1.根据render()渲染函数,生成“抽象语法树AST”(此时还是带有指令的),再把AST第一次创建成“虚拟DOM(VNode1)”(Vnode是真实DOM的一种数据描述,它本质上是json格式的数据)
2.根据Vnode1创建真实DOM(第一次接触,收集依赖,watcher发生在此处)把那些声明式变量全部替换成真实数据,DOM渲染完成
第三阶段(更新阶段):beforeUpdate,updated
在beforeUpdate之前
当被劫持的data数据发生变化时,这将经入更新阶段
在更新阶段
vue做了以下事情:
1.当vue上下文的data发生变化时,使用render()渲染函数在生成一新的Vnode2
2.使用大名鼎鼎的Diff运算,patch(old Vnode,new Vnode),找出两个Vnode最小差异,合并Vnode,生成新的Vnode,删除旧的Vnode
3.notify通过Watcher根据"依赖收集"在此更新真实DOM

第四阶段(销毁阶段):beforeDestroy/destroyed
在调用destroy()或路由切换时,组件经入销毁阶段
在销毁阶段中,vue做了如下事情
1.拆卸掉了Watcher,所以DOM不可能再发生更新
2.拆卸掉当前组件的所有子组件,所以这些子组件也会经入销毁阶段
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>
    <div id="example">{{message}}</div>
    <script src="./vue.js"></script> 
<script> 
var vm = new Vue({ 
el: '#example', 
data:{ 
message:'English' 
},
//组件实例被创建之初 | 不能获得DOM节点,data,methods,watch上的方法和数据均不能访问。  (loding)
beforeCreate(){ 
console.log('beforeCreate'); 
},

//组件实例已经完全创建 | 可以访问到data、methodes上的方法和数据。  (结束loading事件)
created(){ 
console.log('created'); 
},

//组件挂载之前 | 得不到具体的DOM节点,Vue挂载的根节点已经创建。  (一个项目用一两次)
beforeMount(){ 
console.log('beforeMount'); 
},

//组件挂载到实例上去以后 | 完成挂载DOM和渲染,可以对挂载的DOM进行操作。  (发起后端Ajax请求)
mounted(){ 
console.log('mounted'); 
},

//组件数据发生变化更新之前 | 数据是新的,但页面是旧的,即页面尚未与数据保存同步。  (访问现有的DOM)
beforeUpdate(){ 
console.log('beforeUpdate'); 
},

//组件数据更新之前 | 数据是新的,页面也是新的,即页面和数据保持同步。
updated(){ 
console.log('updated'); 
this.$destroy(); 
},

//组件实例销毁之前 | (可做一些删除提示,如:您确定删除XX嘛?)
beforeDestroy(){ 
console.log('beforeDestroy'); 
},

//组件实例销毁之后 | 销毁后,当前组件已被删除,无法操作里面的任何东西了。
destroyed(){ 
console.log('destroyed'); 
},
})
</script>
 
</body>
</html>

六、V-On的使用

用来给元素注册点击事件的。

 (1).v_on:事件名 ="事件函数"

 (2).v-on:click 可以简写 @click

 (3).v-on:mouseenter 可以简写 @mouseenter

代码如下(示例):

<!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">
        <!-- 当点击这个按钮,就调用fn1函数 -->
        <button v-on:click="fn1">快点我呀</button>
        <!-- 当双击这个按钮,就调用fn2函数 -->
        <button v-on:dblclick="fn2">快双击</button>
        <!-- 当移入这个按钮,就调用fn3函数 -->
        <button v-on:mouseenter="fn3">移入我</button>

        <!-- 简写形式:把v-on:改成@就是简写形式 -->
        <h4>以下是简写形式</h4>
        <hr>
        <!-- 当点击这个按钮,就调用fn1函数 -->
        <button @click="fn1">快点我呀</button>
        <!-- 当双击这个按钮,就调用fn2函数 -->
        <button @dblclick="fn2">快双击</button>
        <!-- 当移入这个按钮,就调用fn3函数 -->
        <button @mouseenter="fn3">移入我</button>


    </div>

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

    <script>
        new Vue({
            el:'#app',
            
            // data与methods平级
            data:{

            },
            // Vue中放方法的地方
            methods:{
                fn1(){
                    alert('来砍一刀')
                },
                fn2(){
                    alert('砍了两刀')
                },
                fn3(){
                    alert('小朋友,快来玩呀')
                }
            }
        })
    </script>
</body>
</html>

七、V-Bind指令

v-bind指令用于响应更新HTML元素的属性,将一个或多个属性或者一个组件的prop动态绑定到表达式。

代码如下(示例):

<!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-bind:让行内元素不写死
         简写   -->

    <div id="app">
        <a href="http://www.baidu.com">跳转</a>
        <a v-bind:href="url">跳转</a>
        <button @click="change" target="_blank">跳转</button>

    </div>

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

    <script>
        new Vue({
            el:'#app',
            data:{
                url:'http://taobao.com'
            },
            methods:{
                change(){
                this.url='http://xiaomi.com'
                    
                }
            }

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

八、V-Show

v-show指令的作用是:根据切换元素的显示状态。原理是修改元素 的display,实现显示隐藏。通过判断自定义值为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-show="isshow">我是由v-show控制的</div>
        <div v-if="isshow">我是由v-if控制的</div>

    </div>

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

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

        })
    </script>


</body>
</html>

九、V-If的使用

v-if用于条件判断,判断Dom元素是否显示。

代码如下(示例):

<!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">
        <!-- 多分支使用v-if -->
        <h3>根据自己有多少钱,决定今天晚上吃什么</h3>
        <div v-else-if="money >= 10000">吃豪华海鲜自助</div>
        <div v-else-if="money >= 5000">吃季季红火锅</div>
        <div v-else-if="money >= 1000">嗦南昌拌粉</div>
        <div v-else-if="money >= 100">喝AD钙奶</div>
        <div v-else-if="money">不吃了呗,咋整</div>

        <hr>

        <!-- 双分支使用v-if -->
        <div v-if="age > 18">成年了,去网吧</div>
        <div v-else>未成年,去公园捡垃圾</div>
    </div>

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

    <script>
        new Vue({
            el:"#app",
            data:{
                money:10000,
                age:18
            }
        })
    </script>
</body>
</html>

十、V-If与V-Show的区别

v-show和v-if都可以用来控制标签的显示与隐藏
<标签 v-show=‘布尔值’><标签>
<标签 v-if=‘布尔值’><标签>
当布尔值为true,他们就显示;当布尔值为false,他们就隐藏.

 <!-- 面试题!重要!重要!重要!

    【v-show】

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

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

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

    【v-if】

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

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

    3.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">
       <div v-show="isShow">我是由v-show控制的</div>
       <div v-if="isShow">我是由v-if控制的</div>
    </div>

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

    <script>
       new Vue({
           el:"#app",
           data:{
               isShow:true
           }
       })
    </script>

</body>
</html>

十一、V-For遍历数组

【v-for】
    语法:<标签 v-if='item in 数组'></标签> 

代码如下(示例):

<!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">
        <button @click="add">在最后添加一个</button>
        <button @click="shift">删除第一个</button>
        <ul>
            <!-- 第一个参数是元素 -->
            <li v-for="(item,index) in list">{{ item }}---{{ index }}</li>
        </ul>
    </div>

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

    <script>
        new Vue({
            el:'#app',
            data:{
                list:['依依','尔尔','叁叁','丝丝']
            },
            methods:{
                add(){
                    this.list.push('呜呜')
                },
                shift(){
                    this.list.shift('依依')
                }
            }
        })

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

十二、V-For遍历对象

    v-for可以遍历对象
    语法:<标签 v-for="(val,key) in 对象"></标签>
          <标签 v-for="val in 对象"></标签> 

代码如下(示例):

<!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">
        <ul>
            <!-- 对象有多少个属性就会产生多少个这样的标签 -->
            <li v-for="item in obj">{{ item }}</li>
            <!-- 第一个参数是属性值,第二个参数是属性名 -->
            <!-- 跟名字无关,也可以简写只拿属性值 -->
            <li v-for="(val,key) in obj">{{ val }}---{{ key }}</li>
        </ul>
    </div>

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

    <script>
        new Vue({
            el:'#app',
            data:{
                obj:{
                    name:'王鹤棣',
                    age:21,
                    sex:'男',
                    character:'handsome'
                }
            }
        })

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

十三、V-For遍历数字

v-for 遍历数组,索引从0开始,v-for遍历数字索引从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>
    <div id="app">
        <!-- 遍历数字(指定次数的最高) -->
        <h2>以下是指定数字</h2>
        <ul>
            <li v-for="num in 20">{{ num }}</li>
        </ul>

    </div>
    <script src="./vue.js"></script>
    <script>
        new Vue({
            el:'#app'
        })
    </script>
</body>
</html>

十四、V-For中的key

使用v-for 的时候,给对应的元素或组件添加上一个:key 属性,为了更好地复用,但是要保证这个 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">
        <button @click="list.splice(1,0,{id:4,name:'哈尼克孜'})">添加</button>
        <ul>
            <li v-for="item in list" :key="item.id">
                <input type="checkbox">
                <span>{{ item.name }}</span>
            </li>
        </ul>
    </div>

    现象:当我勾了黄明昊,然后在下标1的位置添加了

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

    <script>
        new Vue({
            el:'#app',
            data:{
                list:[
                    {id:1, name:'王鹤棣'},
                    {id:2, name:'黄明昊'},
                    {id:3, name:'老秦'}

                ]
            }

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

总结

提示:这里对文章进行总结:
例如:以上就是今天要讲的内容,本文仅仅简单介绍了pandas的使用,而pandas提供了大量能使我们快速便捷地处理数据的函数和方法。

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值