Vue.js实例方法之生命周期详解


Posted in Javascript onJuly 03, 2017

本文主要给大家介绍的是关于Vue.js实例方法之生命周期的相关内容,分享出来供大家参考学习,学习的朋友们下面来一起看看详细的介绍:

一、$mount()挂载方法

$mount是用来挂载扩张的。如果 Vue 实例在实例化时没有收到 el 选项,则它处于“未挂载”状态,没有关联的 DOM 元素。可以使用 vm.$mount() 手动地挂载一个未挂载的实例。

比如我们扩张了一个全局组件,通过$mount手动的挂载到DOM上,也就生成了一个Vue实例。

<div id="#app"></div>

扩张一个全局组件,并且挂载到DOM上。

//扩张全局的组件
var navBar = Vue.extend({
 template: `<div>{{ title }}</div>`,
 data(){
 return {
  title: 'Vue 扩展的全局组件'
 }
 },
 mounted(){
 console.log('挂载上了')
 }
})

//使用全局扩张的组件,挂载到id为#app的DOM上(会替换#app)
var vm = new navBar().$mount('#app');

//或者
var vm = new navBar({el: "#app"})

如果没有提供 elementOrSelector 参数,模板将被渲染为文档之外的的元素,并且必须使用原生DOM API把它插入文档中。

//在文档之外渲染,并且挂载
var navbar = new navBar().$mount()
document.getElementById('app').appendChild(navbar.$el)

二、$destroy()销毁方法

作用: 完全销毁一个实例。

Vue 实例销毁后调用。调用后,Vue 实例相关的所有东西都会解绑定,所有的事件监听器会被移除,所有的子实例也会被销毁。

<div id="app">

</div>
<button onclick="destroy()">销毁</button>

在组件中挂载destroyed生命周期钩子

var navBar = Vue.extend({
 template: `<div>
   <div>{{ title }}</div>
   <h2>{{ num }}</h2>
   <button @click = 'add'>add</button>
  </div>`,
 data(){
 return {
  title: 'Vue 全局扩展组件',
  num: 10
 }
 }
 destroyed(){
 console.log('销毁了')
 },
 methods: {
 add(){
  this.num++
 }
 }
})

//使用全局扩张的组件,挂载到id为#app的元素上
var vm = new navBar().$mount('#app');

//销毁
function destroy(){
 //点击按钮,销毁vm实例,控制台会输出‘销毁了',当再次点击的时候不会输出,而且点击add按钮,数量也不会改变,说明已经销毁了
 vm.$destroy()
}

Vue.js实例方法之生命周期详解

三、$forceUpdate()更新方法

该方法是迫使Vue实例重新渲染。注意:它仅仅影响实例本身和插入插槽内容的子组件,而不是所有子组件。

看代码:

<button onclick="reload()">刷新</button>
//同样的,为了看到是否重新更新了数据,即是否执行了reload方法,我们在实例中添加updated选项
updated(){
 console.log('数据重新渲染了')
}

//三、更新数据方法
function reload(){
 vm.$forceUpdate()
}

点击更新按钮,控制台打印出updated钩子中的输出,说明Vue实例重新渲染了。

Vue.js实例方法之生命周期详解

四、$nextTick()数据修改方法

参数: {Function} [callback]

该方法是构造器data中的数据被修改后触发,相当于updated钩子函数,但还是有区别的:它是在updated钩子函数执行完之后执行其里边的回调函数。也就是将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。

methods: {
 add(){
  //更改数据
  this.num++
  this.$nextTick(function(){
   console.log('DOM现在更新了')
  })
 }
},
updated(){
 console.log('数据更新成:'+this.num)
}

Vue.js实例方法之生命周期详解

通过控制台的打印结果,可以看到,当数据改变时,updated钩子早于$nextTick中的回调。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Javascript 相关文章推荐
给before和after伪元素设置js效果的方法
Dec 04 Javascript
Chrome不支持showModalDialog模态对话框和无法返回returnValue问题的解决方法
Oct 30 Javascript
微信小程序 wx.uploadFile在安卓手机上面the same task is working问题解决
Dec 14 Javascript
Angularjs根据json文件动态生成路由状态的实现方法
Apr 17 Javascript
jQuery 表单序列化实例代码
Jun 11 jQuery
基于Vue的移动端图片裁剪组件功能
Nov 28 Javascript
Angular整合zTree的示例代码
Jan 24 Javascript
使用vue-cli导入Element UI组件的方法
May 16 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
JS实现躲避粒子小游戏
Jun 18 Javascript
小程序实现简单语音聊天的示例代码
Jul 24 Javascript
vue组件中节流函数的失效的原因和解决方法
Dec 02 Vue.js
基于Vuejs和Element的注册插件的编写方法
Jul 03 #Javascript
Async Validator 异步验证使用说明
Jul 03 #Javascript
在vue-cli脚手架中配置一个vue-router前端路由
Jul 03 #Javascript
Require.js的基本用法详解
Jul 03 #Javascript
React利用插件和不用插件实现双向绑定的方法详解
Jul 03 #Javascript
解决webpack -p压缩打包react报语法错误的方法
Jul 03 #Javascript
JS 学习总结之正则表达式的懒惰性和贪婪性
Jul 03 #Javascript
You might like
php实现的一段简单概率相关代码
2016/05/30 PHP
JQuery 图片延迟加载并等比缩放插件
2009/11/09 Javascript
jQuery通过扩展实现抖动效果的方法
2015/03/11 Javascript
轻量级网页遮罩层jQuery插件用法实例
2015/07/31 Javascript
微信小程序 LOL 英雄介绍开发实例
2016/09/30 Javascript
AngularJS实现动态编译添加到dom中的方法
2016/11/04 Javascript
jQuery为某个div加入行样式
2017/06/09 jQuery
前端图片懒加载(lazyload)的实现方法(提高用户体验)
2017/08/21 Javascript
node-sass安装失败的原因与解决方法
2017/09/04 Javascript
Angular开发实践之服务端渲染
2018/03/29 Javascript
vue实现文件上传功能
2018/08/13 Javascript
详解js中let与var声明变量的区别
2020/04/05 Javascript
JavaScript:ES2019 的新特性(译)
2019/08/08 Javascript
深入学习Vue nextTick的用法及原理
2019/10/08 Javascript
JQuery插件tablesorter表格排序实现过程解析
2020/05/28 jQuery
Vue使用axios引起的后台session不同操作
2020/08/14 Javascript
[49:08]FNATIC vs Infamous 2019国际邀请赛小组赛 BO2 第二场 8.16
2019/08/18 DOTA
python列表与元组详解实例
2013/11/01 Python
跟老齐学Python之玩转字符串(2)更新篇
2014/09/28 Python
python根据时间生成mongodb的ObjectId的方法
2015/03/13 Python
Python实现使用卷积提取图片轮廓功能示例
2018/05/12 Python
python 将print输出的内容保存到txt文件中
2018/07/17 Python
mac PyCharm添加Python解释器及添加package路径的方法
2018/10/29 Python
详解python读取和输出到txt
2019/03/29 Python
解决pycharm同一目录下无法import其他文件
2020/02/12 Python
Tensorflow tensor 数学运算和逻辑运算方式
2020/06/30 Python
python解释器安装教程的方法步骤
2020/07/02 Python
Python unittest装饰器实现原理及代码
2020/09/08 Python
CSS3模拟IOS滑动开关效果
2016/09/28 HTML / CSS
HTML5 input新增type属性color颜色拾取器的实例代码
2018/08/27 HTML / CSS
自动化专业毕业生自荐信
2013/11/01 职场文书
我为自己代言广告词
2014/03/18 职场文书
2014年科普工作总结
2014/12/06 职场文书
运动会宣传语
2015/07/13 职场文书
深入理解python多线程编程
2021/04/18 Python
Java框架入门之简单介绍SpringBoot框架
2021/06/18 Java/Android