浅析Vue实例以及生命周期
最简单的Vue实例
//html{{message}}
由于Vue借鉴了MVVM的思想,这里的字符串"HelloVue!"就相当于Model,DOM就相当于View,Vue实例"vm"则是起连接Mode和View作用的ViewModel,因此我们才得以通过数据驱动视图,而不需要关心它是怎么实现的,因为Vue已经帮我们做好了一切。
Vue实例内置的属性和方法都是以"$"开头的,例如:vm.$data、vm.$el等,另外选项并不等于实例,选项是通过newVue()构造函数时传入的参数对象,但是实例可以从暴露的接口访问某些选项的值,例如:console.log(vm.$data.message)输出"HelloVue!"。
实例的生命周期
在创建实例的过程中,Vue提供了一些生命周期钩子函数,允许我们再某一特定阶段执行一些额外的操作:
beforeCreate:
在实例初始化之后,数据绑定之前会调用这个函数,例如:
//javascript varvm=newVue({ el:'#app', data:{ message:'HelloVue!' }, beforeCreate:function(){ console.log(this.message);//undefind } })
需要说明的有两点:1、这里的"this"指向Vue实例,即"vm",2、Vue实例同时也代理了选项中"data"下的所有属性,也就是说vm.message==vm.$data.message=="HelloVue!",但是因为在这个阶段数据并没有绑定到Vun实例上面,所以输出"undefind"。在这之前数据会先保存在vm.$options中,如果要在这个阶段获取数据,可以先通过vm.$options.data()方法,返回"data"对象,通过vm.$options.data().message返回对应的值。
在这个阶段可以做一些不需要数据的工作,比如说开启全局loading效果。
created:
在实例创建完成,数据绑定之后会调用这个函数,此时console.log(this.message)输出正确的值"HelloVue!"。
在这个阶段,数据已经初始化为选项中的默认值,但是真实的数据还要通过ajax从后端数据库获取,因此这个阶段可以向后端发请求获取数据,然后绑定到对应属性上。
之后判断选项中有无"el"属性(作为Vue实例的挂载目标,在这里就是id为app的div标签),如果没有,则需要手动调用vm.$mount(el)方法指定挂载的目标;
接着判断选项中有无"template"属性,如果没有,则直接使用"el"属性指定的挂载目标,如果有,那么就用"template"属性指定的字符串模板替换挂载目标,挂载目标中的所有内容将被忽略;
beforeMount:
在实例挂载之前调用。
在这个阶段可以移除全局loading效果。
mounted:
在实例挂载之后调用。
在这个阶段页面已经加载完毕,可以对DOM进行操作。
beforeUpdate:
在数据更新时调用。
在这个阶段可以在数据更新前访问现有的DOM。
updated:
在数据更新之后调用。
在这个阶段可以对更新后的DOM进行操作。