vue
提供了几个钩子函数,用于对应由vue
建立的实例对象的生命周期。下面来罗列在vue2.0
当中定义的生命周期函数。html
beforeCreate
created
DOM
还未生成($el
属性还不存在)时触发执行。beforeMount
mounted
vue1.x
当中的compiled
和ready
)beforeUpdate
updated
beforeDestroy
destroyed
在上述的钩子函数当中,比较经常使用的有mounted
和updated
。注意mounted
不会承诺全部的子组件也都一块儿被挂载。若是但愿等到整个视图都渲染完毕,能够用vm.$nextTick
替换掉mounted
。以下所示:vue
mounted: function(){ this.$nextTick(function(){ // Code that will run only after the // entire view has been rendered }) }
当咱们在vue
实例对象的methods
当中定义了一个方法,但愿当文本节点所有插入文档当中以后先自动调用一次该方法,那么咱们就能够把对该方法的调用写在moutned
函数体内部,相似于原生js
当中window.onload
的做用。示例代码以下所示:数组
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title></title> <script src="vue.js"></script> <script> window.onload = function(){ var vm = new Vue({ el:'#box', data:{ }, methods:{ show:function(){ alert(1); } }, mounted:function(){ this.$nextTick(function(){ this.show(); }); } }); }; </script> </head> <body> <div id="box"> <button @click="show()">按钮</button> </div> </body> </html>
则当页面加载完成,实例对象建立,组件挂载完成以后就会先调用一次该实例对象当中的show
方法。注意,在该实例对象内部一样经过this
来获取该方法。dom
当咱们定义var vm = new Vue({});
以后代表建立了一个新的vue
实例对象,vm
这个实例对象在建立完成以后,在其身上就自带了一些简单的属性和方法,在实例对象外部经过vm.
的方式来获取,在实例对象内部经过this.
的方式来获取。函数
vm.$el(this.$el)
该实例属性能够获取到vm
这个实例对象所挂载的dom
元素。示例代码以下所示:this
<script> window.onload = function(){ var vm = new Vue({ el:'#box', data:{ msg:"hahaxixi" }, methods:{ change:function(){ this.$el.style.color = 'red'; } } }); }; </script> <div id="box"> <button @click="change()">按钮</button> <h2>{{msg}}</h2> </div>
在上述示例当中,由this.$el
获取的dom
元素相似于document.getElementById('box')
的效果。页面刚完成加载渲染的效果为:spa
当咱们点击按钮后,页面呈现结果为:code
vm.$data(this.$data)
该实例属性能够获取该实例对象当中data
这个数据对象。示例代码以下所示:htm
<script> window.onload = function(){ var vm = new Vue({ el:'#box', data:{ msg:"hahaxixi" }, methods:{ show:function(){ alert(this.$data.msg); } } }); }; </script> <div id="box"> <button @click="show()">按钮</button> <h2>{{msg}}</h2> </div>
当咱们点击按钮时,便可在弹出框当中显示data
这个数据对象当中msg
对应的属性值"hahaxixi"
。对象
vm.$mount()
该实例方法能够容许咱们手动挂载vue
实例到某个指定的dom
元素身上。当使用这个方法时,在实例对象内部能够不给el
属性赋值。
var vm = new Vue({ el:'#box', data:{}, methods:{} }); var vm = new Vue({ data:{}, methods:{} }).$mount('#box');
上述两段代码的做用效果是同样的。
vm.$destroy()(this.$destroy())
该实例方法用于销毁实例对象。
vm.$options(this.$options)
该实例属性用于获取咱们在vm
这个实例对象内部自定义的属性或方法。示例代码以下所示:
<script> window.onload = function(){ var vm = new Vue({ data:{ }, methods:{ change:function(){ alert(this.$options.aa); this.$options.show(); } }, aa:'haha', show:function(){ alert('xixi'); } }).$mount('#box'); }; </script> <div id="box"> <button @click="change()">按钮</button> </div>
从上述代码当中能够知道,咱们能够给vm
这个实例对象加上自定义的属性和方法。aa
为自定义的属性,在实例内部经过this.$options.aa
来获取,show
为自定义的方法,在实例内部能够经过this.$options.show()
来调用。故当点击按钮以后,先弹出'haha'
,再弹出'xixi'
。
vm.$watch('数据属性名',function(newVal,oldVal){})
该实例方法能够用于监听实例对象当中数据的变化。该方法的第一个参数写vm
这个实例对象当中所要监听的数据属性名,当被监听的数据发生变化时执行其回调函数,该回调函数当中默认接收两个参数,形参名能够任取,回调函数当中第一个参数表示数据变化以后的值,第二个参数表示数据变化以前的值。示例代码以下所示:
<script> window.onload = function(){ var vm = new Vue({ el:'#box', data:{ msg:'haha' }, methods:{ change:function(){ this.msg = 'xixi'; } } }); vm.$watch('msg',function(newVal,oldVal){ alert(newVal); alert(oldVal); }); }; </script> <div id="box"> <button @click="change()">按钮</button> <h2>{{msg}}</h2> </div>
当咱们点击按钮时,数据发生变化,即会调用$watch
当中的回调函数,先弹出"xixi"
,而后再弹出"haha"
。
上述这种vm.$watch(name,fnCb)
的方式调用只是对数据进行浅度的监视,当要监视的数据为一个对象是,当该对象内部的属性值发生变化时,使用浅度监视没法监测到这个变化,此时须要使用深度监视,调用方式为vm.$watch(name,fnCb,{deep:true})
。但咱们若是监视的是一个数组对象,则只需使用浅度监视便可监视到数组内部的元素数据是否发生了变化。
vue
当中的自定义指令名称必须以v-
开头,不过咱们在定义这个自定义指令时,名称省略v-
的前缀。如
自定义指令的名称为v-red
,则定义为Vue.directive('red',function(el){});
该函数当中的形参el
表明使用了这个v-red
指令的dom
元素。示例代码以下所示:
<script> window.onload = function(){ Vue.directive('red',function(el){ el.style.color = 'red'; }); var vm = new Vue({ el:'#box', data:{ msg:'qianqian' } }); }; </script> <div id="box"> <h2 v-red>{{msg}}</h2> </div>
可接收参数的自定义指令定义为Vue.directive('red',function(el,binding){});
该函数当中的形参el
表明使用了这个v-red
指令的dom
元素,在函数体内部使用binding.value
来表明该自定义指令所接收到的参数。示例代码以下所示:
<script> window.onload = function(){ Vue.directive('red',function(el,binding){ el.style.color = binding.value; }); var vm = new Vue({ el:'#box', data:{ msg:'qianqian', b:'skyblue' } }); }; </script> <div id="box"> <h2 v-red="b">{{msg}}</h2> </div>
当自定义指令接收的参数为一个对象时,示例代码以下所示:
<script> window.onload = function(){ Vue.directive('red',function(el,binding){ el.style.color = binding.value.color; el.style.backgroundColor = binding.value.background; }); var vm = new Vue({ el:'#box', data:{ msg:'qianqian', b:'skyblue', c:'yellow' } }); }; </script> <div id="box"> <h2 v-red="{color:b,background:c}">{{msg}}</h2> </div>