什么是生命周期?每个Vue实例在创建时都会经历一系列的初始化过程。设置数据监控,编译模板,挂载实例到DOM,数据变化时更新DOM。在这一系列过程中,还会运行一些“生命周期钩子”函数,用于让开发人员有机会在不同阶段添加自己的代码。“created”钩子在创建实例后执行代码newVue({data:{a:1},created:function(){//`this`指向vm实例console.log('ais:'+this.a)}})//=>"ais:1"不要在选项属性或回调上使用箭头函数,如created:()=>console.log(this.a)或vm.$watch('a',newValue=>this.myMethod())。因为箭头函数没有this,所以this会作为变量向上层词法作用域查找,直到找到为止,这往往会导致UncaughtTypeError:Cannotreadpropertyofundefined或者UncaughtTypeError:this.myMethodis等错误不是一个功能。说到Vue实例,通俗地说:在Vue加载之前到销毁之后的一系列过程中,有特定的阶段fn可以提供给我们的开发者去操作。stagehook函数方法触发stage操作beforeCreate。组件实例在创建之前只是创建,数据对象数据在组件属性计算之前是未定义的。uninitializedcreated创建完成后,组件实例创建完成,属性已经绑定,数据对象数据已经定义并存在。DOM没有生成,$el在Mount之前不存在,Vue实例的$el和data在Mounting之前已经初始化,是mount之前的虚拟dom节点,模板还没有渲染到HTML页面,data.message没有被替换。挂载后,Vue实例挂载,模板已经渲染成HTML,dota.message渲染成功。这个阶段可以做一些ajax请求操作,mounted在循环中只会执行一次。beforeUpdate更新前,dota更新前,会触发beforeUpdate方法。updated更新后,当数据更新完成后,触发updated方法。beforeDestory在Vue组件实例被销毁之前执行的方法。destroyed组件销毁后,调用的方法和数据的改变都不会触发week函数。vue实例解除了事件监听和dom绑定,但是dom结构依然存在。ExampleimportAxiosfrom'axios'//这是一个轻量级的ajax库,import是es6模块import的语法。exportdefault{//这是一个vue模块,后面会讲到。name:'app',components:{},data:function(){return{list:[]}},mounted:function(){//生命周期挂钩注册待完成。this.$nextTick(function(){//等待下一次更新执行业务处理代码Axios.get('/api/menulist',{//延迟回调直到下一个DOM更新周期。修改数据后立即使用,然后等待DOM更新params:{}}).then(function(res){this.list=res.data}.bind(this))})}}全局配置Vue实例的silent类型:boolean默认值:false用法:Vue.config.silent=true//取消Vue的所有日志和警告optionMergeStrategies类型:{[key:string]:Function}默认值:{}用法:Vue.config.optionMergeStrategies。_my_option=function(parent,child,vm){returnchild+1}constProfile=Vue.extend({_my_option:1})Profile.options._my_option=2//自定义合并策略选项//单独接受合并策略选项第一个参数是父实例,第二个参数是子实例,第三个参数传入Vue实例上下文。devtoolstype:boolean默认值:trueUsage://一定要在加载Vue后立即同步设置以下内容Vue.config.devtools=true//配置是否允许vue-devtools检查代码。开发构建默认为true,生产构建默认为false。为生产构建设置为true以启用检查。Vue的全局APIVue.nextTick语法:Vue.nextTick([callback,context]){Function}[callback]{Object}[callback]用法:在下一个DOM更新周期结束后执行延迟回调。修改数据后立即使用该方法获取更新后的DOM//修改后的数据vm.msg='msg'//DOM未更新Vue.nexTick(function(){//DOM已更新//执行操作})Vue.set语法:Vue.set(object,key,value)参数:{Object}object{String}key{any}value用法:设置对象数据。如果对象是响应式的,确保属性创建后也是响应式的,同时触发视图更新。该方法主要用于避免Vue无法检测到属性被添加的限制。注意对象不能是Vue实例,也不能是Vue实例的根数据对象。Vue.complie语法:Vue.compile(template)参数:{string}template用法://在render函数中编译模板字符串//独立构建时有效varres=Vue.Compile(`
