一、 vue2的双向数据绑定原理
vue2双向绑定的核心只要是利用ES5中的Object.defineProperty实现的,然后利用里面的getter和setter来实现双向数据绑定的
二、vue2的生命周期
vue的生命周期即为一个组件从出生到死亡的一个完整周期,主要包括以下4个阶段:
创建,挂载,更新,销毁
beforeCreate( 创建前 )
在实例化之后,数据的观测和事件的配置之前的时候调用,此时组件的选项对象还未创建,el 和 data 并未初始化,因此无法访问methods, data, computed等上的方法和数据
created ( 创建后)
在创建之后使用,主要用于数据观测、属性和方法的运算,watch/event事件回调,完成了data 数据的初始化,el没有。 然而,挂在阶段还没有开始.
beforeMount (挂载前)
用于在挂载之前使用,在这个阶段是获取不到dom操作的,把data里面的数据和模板生成html,完成了data等初始化,注意此时还没有挂在html到页面上
mounted (挂载后)
用于挂载之后使用,在这个时候可以获取到dom操作,比如可以获取到ref等,操作的dom, 在这个时候只能调用一次ajax,在这个时候el和data都可以获取的到
beforeUpdate (更新前)
在数据更新之前被调用,发生在虚拟DOM重新渲染,可以在该钩子中进一步地更改状态,不会触发重复渲染过程
updated (更新后)
在由于数据更改导致地虚拟DOM重新渲染会调用,调用时,组件DOM已经更新,所以可以执行依赖于DOM的操作,然后在大多是情况下,应该避免在此期间更改状态,因为这可能会导致更新无限循环,但是在服务器端渲染期间不被调用,可以用于监听某些数据的时候使用钩子
beforeDestroy(销毁前)
在这个时候还是可以用this来获取,可以用于销毁计时器时候使用,为了防止跳转到其它页面该事件还在执行,还可以清除dom事件等
destroyed(销毁后)
在实例销毁之后调用,调用后,所以的事件监听器会被移出,所有的子实例也会被销毁.
三、 computed和watch的区别
计算属性computed
- 支持缓存,只有依赖数据发生变化,才会重新进行计算;
- 不支持异步,当computed内有异步操作时无效,无法监听数据的变化
- computed 属性值会默认走缓存,计算属性是基于它们的响应式依赖进行缓存的,也就是基于data中声明过或者父组件传递props中的数据通过计算得到的值
- 如果一个属性是由其他属性计算