多应用+插件架构,代码干净,二开方便,首家独创一键云编译技术,文档视频完善,免费商用码云13.8K 广告
# 初始化 ``` <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>vue-circle-life</title> </head> <body> <div id="app"> <input type="text" v-model="msg"> <p id="p">{{msg}}</p> </div> <script src="node_modules/vue/dist/vue.js"></script> <script> var vm = new Vue({ el: '#app', data: { msg:'hi' }, beforeCreate(){ console.log('beforeCreate') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) }, created(){ console.log('created') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) } }) </script> </body> </html> ``` ![](https://img.kancloud.cn/46/ad/46ad314f30be37ca5698819688181792_562x462.png) 在初始化中,`beforeCreate`生命周期函数中我们发现,获取不到数据,并且,得到的html内部内容其实就是我们书写的标签内容。未被真正的挂载数据,也没有真正的`html`元素显示。 `created`生命击期函数中,我们发现可以获取到数据,得到的内容还是网页中书写的标签内容,也未被显示真正的`html`元素。 ## 总结 `beforeCreated` 数据访问不到,并且html还未编译 `created` 数据可以访问到,也可以修改,模板还未编译 # 挂载中 ``` var vm = new Vue({ …… beforeMount() { console.log('beforeMount') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) }, mounted() { console.log('mounted') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) }, }) ``` ![](https://img.kancloud.cn/87/b4/87b42d37bddb95957e82ac35990dccc7_558x525.png) 我们可以发现,`beforeMount`时数据也可以访问到,且此时模板已经编译完成,不过还未更新到页面中。 `mounted`,数据也可以访问,此时已经将编译的模板更新到页面中。 # 更新 ``` …… beforeUpdate() { console.log('beforeUpdate') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) }, updated() { console.log('updated') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) }, …… ``` ![](https://img.kancloud.cn/13/2e/132eabf5b279db90be89dea7f949211f_581x846.gif) 发现更新中的生命周期默认是不会执行的,只有当数据发生更改时才会触发。 `beforeUpdate`生命周期,可以获取数据,但是页面中的内容还是旧的内容。 `updated`生命周期,可以获取数据,页面的内容已经更新成新的内容了。 # 销毁 ``` …… beforeDestroy() { console.log('beforeDestroy') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) }, destroyed(){ console.log('destroyed') console.log(this.msg); console.log(document.getElementById('p')&&document.getElementById('p').innerHTML) } …… ``` 实例被销毁,是要通过`vm.$destroy()`调用才可以。不过,它只不过是实例销毁,反应销毁,数据销毁,但是显示到页面中的元素,还依然存在。不过尽可能的不要通过`vm.$destroy()`方法来销毁。 ## 知识点 `this.$el` 可以获取到Vue 实例使用的根 DOM 元素。可能会显示到页面中,也可能还没有显示到页面中。在mounted之前是不会显示到页面中的。