vue2知识点(一)(查缺补漏,打好基础)

1. Vue.config.productionTip=false 阻止vue在在启动时生成生产提示

2. v-model只能用于表单元素上(如:input select),v-model默认收集 的是value值, v-model:value="name"的简写是 v-model="name"

3. el的第一种写法:el:"#root",第二种写法 vm.$mount("#root")意思是:将root模板挂载在vm实例上

4. data的两种写法,①对象式data:{} ②函数式data(){return{}},在用组件的时候必须用 函数式

一个重要原则是:vue所管理的函数,不能采用箭头函数,一旦写了箭头函数,vue所指向的this就不是vue实例了,而是向上一层寻找this.

5. MVVM模型

(1).M:(模型model):对应data中的数据

(2).V:(视图View):模板

(3).VM(视图模型):Vue实例对象

m-->vm-->v

data中的所有属性最后都出现在了vm身上;

vm身上的所有属性及 vue原型上的所有属性 在vue 模板中都可以直接使用

6. Object.defineProperty的使用,例如:可以给person对象添加age属性和值,并且可以给其添加更多高级方法来控制age使用。

<script type="text/javascript">
    let number=18
    let person={
        name:"张三",
        sex:"男",
    }
    
    Object.defineProperty(person,'age',{
        ennumerable:true;//控制属性是否可以枚举,默认是false
        writable:true;//控制属性是否可以被修改,默认值是false
        configurable:true;//控制属性是否可以呗删除
        get(){
            console.log('有人读取age属性了')
            return number;
        },
        set(value){
            console.log("有人修改了age属性且值是",value);
            number=value;
        }
    })
</script>

7. 数据代理:通过一个对象代理对另一个对象中的属性操作(读/写)

通过vm对象来代理data对象中属性的操作

好处:更加方便的操作data中的数据

基本原理:通过object.defineProperty()把data对象中所有属性添加到vm上。 为每一个添加到vm上的属性,都添加一个getter和setter。 在getter/setter内部去操作data对应的属性。控制台输入 vm._data.name和 vm.name都可访问

<script>
    let obj={x:100}
    let obj2={y:299}
​
    Object.defineProperty(obj2,'x',{
        get(){
            return obj.x;
        },
        set(value){
            obj.x=value;
        }
    })
</script>

8. methods中配置的函数不要用箭头函数,否则this指向就不是vm了。

methods中配置的函数,都是被vue所管理的函数,this的指向是vm,或组件实例对象。

9. vue中的事件修饰符

(1).prevent :阻止默认事件(常用),如:@click.prevent="show()"

(2).stop:阻止事件冒泡

(3).once:事件只触发一次

(4).capture:使用事件的捕获模式

(5).self:只有event.target是当前操作的元素时才触发的事件

(6).passive:事件的默认行为立即执行,无需等待回调执行完毕。

10. 键盘事件(vue 中常用的按键别名)

回车-> enter

删除->delete(捕获删除和退格键)

退出->esc

空格->space

换行->tab(特殊,必须配合keydown去使用)

上 ->up

下->down

左 ->left

右 ->right

1.Vue未提供别名的按键,该按键可以使用原始的key值去绑定,但要注意转为kebab-case(短横线命名)的形式。

2.系统修饰键用法特殊:ctrl,alt,shift,meta(win键)

①配合keyup使用:按下修饰键的同时,再按下其他键。随后释放其他键,事件才能被触发。如:@keyup.ctrl="show()"或@keyup.ctrl.y="show()"等

②配合keydown使用:正常触发事件;如@keydown.ctrl="show()"

3.也可以使用keyCode去指定具体的按键(不推荐),如:@keyup.13="show()"

4.Vue.config.keyCodes.自定义键名=键码,可以去定制按键别名。(一般也不用自己去定义)

11. 监视属性watch

(1)当被监视的属性变化时,回调函数自动调用,进行相关操作

(2)监视的属性必须存在才能监视

(3)监视的两种写法

1.new Vue时传入watch配置

2.通过vm.$watch监视

代码如下:

watch:{
•           isHot:{
•                   immediate:true, //初始化时让handler调用一下
•                   //handler什么时候调用?当isHot发生改变时。
•                   handler(newValue,oldValue){
•                   console.log('isHot被修改了',newValue,oldValue)
•                   }
•               }
•           }
•       简写:
•           watch:{
•               isHot(newValue,oldValue){                       
•               console.log('isHot被修改了',newValue,oldValue)
•                   }
•               }
•           
•       vm.$watch('isHot',{
•           immediate:true, //初始化时让handler调用一下
•           //handler什么时候调用?当isHot发生改变时。
•           handler(newValue,oldValue){
•               console.log('isHot被修改了',newValue,oldValue)
•           }
•       })
•   简写:
•       vm.$watch('isHot',function(newValue,oldValue){
•               console.log('isHot被修改了',newValue,oldValue)
•           }
•       })

12.watch的深度监视

深度监视:

(1).Vue中的watch默认不监测对象内部值的改变(一层)。

(2).配置deep:true可以监测对象内部值改变(多层)。

备注:

(1).Vue自身可以监测对象内部值的改变,但Vue提供的watch默认不可以!

(2).使用watch时根据数据的具体结构,决定是否采用深度监视。

①监视多级结构中某个属性的变化

   watch:{
•               "number.a"{
•               handler(){}
•           }
•       }

② 监视多级结构中所有属性的变化

        watch:{
•           numbers{
•               deep:true;//深度监视
•               handler(){}
•           }
•       }

13.computed和watch之间的区别

1.computed能完成的的功能,watch也能完成

2.watch能完成的功能,computed不一定能完成。例如:watch可以进行异步操作

watch:{
    fistName(val){
       setTiomout(()=>{
        this.fullName= this.val+this.lastName;
    },1000)//延时1秒后fullname的变化才显示
    }
}

两个重要的原则:

①被vue管理的函数,最好是写成普通函数。这样thiis的指向才是vm,或组件实例对象

②所有不被vue管理的函数(定时器函数,ajax的回调函数等,promise的回调函数),最好写成箭头函数。这样this的指向才是vm或组件实例对象。

14.v-if和v-show

①template可以配合v-if使用,不能配合v-show使用

②当需要频繁使用切换和显示时,采用v-show。

③v-if不展示时在dom元素上移除;v-show不展示时dom元素未移除,仅仅是使用样式被隐藏掉

④使用v-if时元素可能无法获取到,使用v-show元素一定可以获取到。

⑤v-if可以配合v-else-if和v-else使用,且结构不可以被打断

15.v-for

①用于展示列表数据

②语法:v-for="(item,index) in xxx" :key="index"

③可遍历数组,对象,字符串(用的少),指定次数(用的少)

16.react和vue中的key有什么作用?(key的内部原理)

1.虚拟DOM中key的作用:

key是虚拟dom对象的标识,当数据发生变化时,Vue会根据( 新数据)生成(新的虚拟Dom),

随后Vue进行(新的虚拟Dom)与(旧的虚拟Dom)的差异比较,比较规则如下:

2.对比规则:

(1).旧的虚拟Dom找到了新的虚拟Dom相同的key:

①若虚拟Dom中的内容没有变,则直接使用之前的真实Dom;

②若虚拟Dom中的内容变了,则生成新的真实Dom,随后替换掉原来的真实Dom

(2).旧的虚拟Dom中未找到与新的虚拟Dom中相同的key

①创建新的真实Dom,随后渲染到页面。

3.用index作为key,可能会引发的问题:

(1).若对数据进行:逆序添加,逆序删除等破坏顺序的操作:

会产生没有必要的真实Dom的更新==》界面效果没有问题,但是效率低

(2).如果结构中还包含输入类的Dom:

会产生错误Dom更新,随后渲染到页面,界面会出现问题。

4.开发中如何选择key?

(1).最好使用每条数据的唯一标识作为key,比如id,手机号,身份证号,学号等唯一的值。

(2).如果不存在对数据的逆序添加,逆序删除等破坏顺序的操作,仅用于渲染列表用于展示,使用index作为 key是没有问题的。

17.vue监视数据的原理

1.vue会监视data中所有层次的数据。

2.如何监测对象中的数据?

通过setter实现监视,且要在new Vue时就要传入要检测的数据

(1).对象中后追加的属性,vue默认不做响应式处理。

(2).如需给后追加的属性做响应式,请使用如下API:

Vue.set(target,propertyName/index,value)或vm.$set(target,propertyName/index,value)

3.如何监测数组中的数据?

通过包裹数组更新元素的方法实现,本质就是做了两件事

(1).调用原生对应的方法对数组进行更新

(2).重新解析模板,进而更新页面

4.在vue修改数组中的某个元素一定要用如下方法:

1.使用这些API:push(),pop(),shift(),unshift(),splice(),sort(),reverse(),

2.Vue.set()或vm,$set()

注意:Vue.set()和vm.$set()不能给vm或vm的根数据对象 添加属性

18.收集表单数据

1.若:<input type="text" />,则v-model收集的是value值,用户输入的就是value值。

2.若: <input type="radio" />,则v-model收集的是value值,且要给标签配置value值。

3.若:<input type="checkbox" />,则:

(1).没有配置input的value属性,那么收集的就是checked(勾选 or 未勾选,是布尔值)

(2).配置input的value属性:

        ①v-model的初始值是非数组,那么收集的就是checked(勾选 or 未勾选,是布尔值)

        ②v-model的初始值是 数组,那么收集的就是勾选的value组成的数组

4.v-model的三个修饰符(v-model.xxx=...):

        ①lazy:失去焦点再收集数据,减少了频繁收集数据,减少服务器压力

        ②number:控制输入的字符串转为有效的数字

        ③trim:输入的首尾空格过滤掉

19.过滤器

1.定义:对要显示的数据进行特定格式化后再显示(适用于一些简单逻辑的处理)

2.语法:

        ①注册过滤器:Vue.filter(name,callback)或 new Vue(filters:{})

Vue.filter("myslice",function(value){
    return value.slice(0,4);
})
​
new Vue({
    fiters:{
        mySlice(){
            return value.slice(0,4);
                }
        }
})

②使用过滤器:{{xxx | 过滤器名}} 或 v-bind:属性=”xxx | 过滤器名“

3.注:

        ①过滤器也可以接收额外的参数,多个过滤器也可以串联

        ②并没有改变原本的数据,是过滤产生了另一个新的数据

20.v-html指令

1.作用:向指定节点中渲染html结构的内容

2.与插值语法的区别:

        ①v-html会替换掉节点的所有内容,{{xx}}插值语法不会

        ②v-html可以识别html结构

3.严重注意:html有安全性问题!

        ①在网站上动态的渲染任意html是非常危险的,容易导致xss攻击

        ②一定要在可信的内容上使用v-html,永不要用在用户提交的内容上。

21.v-cloak指令(没有值)

1.本质是一个特殊属性,Vue实例创建完毕并接管容器后,会删掉v-cloak属性

2.使用css配合v-cloak可以解决网速慢时页面展示出{{xxx}}的问题

22.v-once指令

1.v-once所在节点在初次动态渲染后,就视为静态内容了。

2.以后数据的改变不会引起v-once所在结构的更新,可以用于优化性能。

23.v-pre指令:

1.可以让vue跳过其所在节点的编译过程。

2.可利用它跳过:没有使用指令语法,没有使用插值语法的节点,可以加快编译的速度

24.自定义指令:

1.定义语法:

①局部指令:

new Vue({
    directives:{指令名:配置对象}
})
或:
new Vue({
    directives:{指令名:回调函数}
})

②全局指令:

Vue.directives(指令名,配置对象)
或:
Vue.directive(指令名,回调函数)

2.配置对象中常用的3个回调:

        ①bind:指令与元素成功绑定时调用

        ②inserted:指令所在元素插入页面时调用

        ③update:指令所在模板结构被重新解析时调用

3.注

        ①指令定义时不加v-,但使用时要加v-;

        ②指令名如果是多个单词,要使用kebab-case命名方式,不要用camelCase命名

25.vue的生命周期

1.又名:生命周期回调函数、生命周期函数、生命周期钩子。

2.是什么:Vue在关键时刻帮我们调用的一些特殊名称的函数

3.生命周期函数的名字不可更改,但函数的具体内容是程序员根据需求编写的

4.生命周期函数中的this指向是vm 或 组件实例对象。

5.常用的生命周期钩子:

        ①mounted:发送ajax请求,启动定时器,绑定自定义事件,订阅消息【初始化操作】

        ②beforeDestroy:清除定时器,解绑自定义事件,取消订阅消息【收尾工作】

6.关于销毁实例:

        ①销毁后借助vue开发者工具看不到任何消息

        ②销毁后自定义事件会失效,但是原生Dom事件依然有效

        ③一般不会在beforeDestroy操作数据,因为即使操作数据,也不会再触发更新流程了

vue生命周期的原理图如下:b030cfee01a44aa18cb8fe7eeb74ac49.png

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

女码农୧( ⁼̴̶̤̀ω⁼̴̶̤́ )૭

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值