Vue实例与生命周期
2018-02-24 20:41
351 查看
概念
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
data对象
data属性是Vue实例的数据对象,可以绑定的是对象或者是函数。Vue会自动将data里面的数据进行递归转换成getter和setter,响应数据的变化,
computed
Vue的计算属性(computed)的属性会自动混入Vue的实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。
computed可以添加很多实例属性,这些属性可以通过实例直接获取到,是通过将作用函数作为属性的getter,通过访问属性就能调用getter来返回值
所以使用的是属性,而不是属性声明的函数;
computed中属性定义的时候,若只定义一个函数则默认为getter函数,
若要定义setter可以使用{}声明多个属性方法
官方例子
methods
methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达
式中使
a1d7
用。方法中的 this 自动绑定为 Vue 实例, 不应该使用箭头函数来定义 method 函数 (例如
与computed区别
method只要页面有渲染就调用方法
computed会缓存数据只有当依赖的数据发生变化才会调用函数,否则直接返回缓存的结果
watch
一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。
el
提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标,只在由 new 创建的实例中遵守。
![](https://img-blog.csdn.net/20180224170553698?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvbnZudl95ZXpp/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
beforeCreate
在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
created
实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
beforeMount
在挂载开始之前被调用:相关的 render 函数首次被调用。
mounted
el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
beforeUpdate
数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
updated
由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
该钩子在服务器端渲染期间不被调用。
beforeDestroy
实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用
使用方法
beforecreate : 可以在这加个loading事件,在加载实例时触发
created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
mounted : 挂载元素,获取到DOM节点
updated : 如果对数据统一处理,在这里写上相应函数
beforeDestroy : 可以做一个确认停止事件的确认框
nextTick : 更新数据后立即操作dom
更多详情参考官网
Vue实例有一个完整的生命周期,也就是从开始创建、初始化数据、编译模板、挂载Dom、渲染→更新→渲染、卸载等一系列过程,我们称这是Vue的生命周期。通俗说就是Vue实例从创建到销毁的过程,就是生命周期。
data对象
data属性是Vue实例的数据对象,可以绑定的是对象或者是函数。Vue会自动将data里面的数据进行递归转换成getter和setter,响应数据的变化,
// 1. // data () { // return {count: 0} // }, // 2. // data: { // count: 0 // }, // 3. data: function() { return { count: 0 } },
computed
Vue的计算属性(computed)的属性会自动混入Vue的实例中。所有 getter 和 setter 的 this 上下文自动地绑定为 Vue 实例。
computed可以添加很多实例属性,这些属性可以通过实例直接获取到,是通过将作用函数作为属性的getter,通过访问属性就能调用getter来返回值
所以使用的是属性,而不是属性声明的函数;
computed中属性定义的时候,若只定义一个函数则默认为getter函数,
若要定义setter可以使用{}声明多个属性方法
官方例子
var vm = new Vue({ data: { a: 1 }, computed: { // 仅读取,值只须为函数 aDouble: function () { return this.a * 2 }, // 读取和设置 aPlus: { get: function () { return this.a + 1 }, set: function (v) { this.a = v - 1 } } } }) vm.aPlus // -> 2 vm.aPlus = 3 vm.a // -> 2 vm.aDouble // -> 4
methods
methods 将被混入到 Vue 实例中。可以直接通过 VM 实例访问这些方法,或者在指令表达
式中使
a1d7
用。方法中的 this 自动绑定为 Vue 实例, 不应该使用箭头函数来定义 method 函数 (例如
plus: () => this.a++)。理由是箭头函数绑定了父级作用域的上下文,所以 this 将不会按照期望指向 Vue 实例,this.a 将是 undefined。
与computed区别
method只要页面有渲染就调用方法
computed会缓存数据只有当依赖的数据发生变化才会调用函数,否则直接返回缓存的结果
watch
一个对象,键是需要观察的表达式,值是对应回调函数。值也可以是方法名,或者包含选项的对象。Vue 实例将会在实例化时调用 $watch(),遍历 watch 对象的每一个属性。
var vm = new Vue({ data: { a: 1, b: 2, c: 3 }, watch: { // 监控a变量变化的时候,自动执行此函数 a: function (val, oldVal) { console.log('new: %s, old: %s', val, oldVal) }, // 深度 watcher c: { handler: function (val, oldVal) { /* ... */ }, deep: true } } }) vm.a = 2 // -> new: 2, old: 1
el
提供一个在页面上已存在的 DOM 元素作为 Vue 实例的挂载目标,只在由 new 创建的实例中遵守。
var app = new Vue({ el: '#app', ... });
Vue实例生命周期
看图理解beforeCreate
在实例初始化之后,数据观测(data observer) 和 event/watcher 事件配置之前被调用。
created
实例已经创建完成之后被调用。在这一步,实例已完成以下的配置:数据观测(data observer),属性和方法的运算, watch/event 事件回调。然而,挂载阶段还没开始,$el 属性目前不可见。
beforeMount
在挂载开始之前被调用:相关的 render 函数首次被调用。
mounted
el 被新创建的 vm.$el 替换,并挂载到实例上去之后调用该钩子。
beforeUpdate
数据更新时调用,发生在虚拟 DOM 重新渲染和打补丁之前。 你可以在这个钩子中进一步地更改状态,这不会触发附加的重渲染过程。
updated
由于数据更改导致的虚拟 DOM 重新渲染和打补丁,在这之后会调用该钩子。
当这个钩子被调用时,组件 DOM 已经更新,所以你现在可以执行依赖于 DOM 的操作。然而在大多数情况下,你应该避免在此期间更改状态,因为这可能会导致更新无限循环。
该钩子在服务器端渲染期间不被调用。
beforeDestroy
实例销毁之前调用。在这一步,实例仍然完全可用。
destroyed
Vue 实例销毁后调用。调用后,Vue 实例指示的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。 该钩子在服务器端渲染期间不被调用
使用方法
beforecreate : 可以在这加个loading事件,在加载实例时触发
created : 初始化完成时的事件写在这里,如在这结束loading事件,异步请求也适宜在这里调用
mounted : 挂载元素,获取到DOM节点
updated : 如果对数据统一处理,在这里写上相应函数
beforeDestroy : 可以做一个确认停止事件的确认框
nextTick : 更新数据后立即操作dom
更多详情参考官网
相关文章推荐
- Vuejs学习系列(十三)---vue实例的生命周期(一)
- vue2.0 关于Vue实例的生命周期
- vuejs2.0 vue实例的生命周期
- vue实例的生命周期讲解
- Vue实例生命周期中created和mounted的区别
- Vue实例与其生命周期运行机制全解析
- 关于Vue实例的生命周期各状态函数(钩子)说明
- vue实例以及生命周期
- Vue实例详解与生命周期
- Vue实例详解与生命周期
- 关于Vue实例的生命周期created和mounted的区别
- Vue实例中生命周期created和mounted的区别详解
- Vue实例的生命周期
- vue实例的生命周期
- Vue.js实例方法之生命周期详解
- 基于Vue实例生命周期(全面解析)
- 第五节:轻松掌握 vue 实例的生命周期
- Vue实例详解与生命周期
- Vuejs学习系列(十三)---vue实例的生命周期(一)
- vue学习03----vue实例以及生命周期