Vue nextTick 学习历程
nextTick 详解
这是官网的解释,比较简洁精炼,反正我是第一遍什么都没看懂
在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。
经过我一步步测试,我觉得应该是dom操作的最后一帧的意思
- 测试代码
<div id="app" @click="handler">{{ msg }}</div>
new Vue({
el: '#app',
data: {
msg: "hello world"
}
methods: {
handler() {
this.msg = "改变dom的顺序1"
this.$nextTick(()=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
}
}
})
此时运行代码,控制台输出 “改变dom的顺序1” 正常
- 在测试代码的handler方法中添加
handler() {
this.msg = "改变dom的顺序1"
this.$nextTick(()=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
his.msg = "改变dom的顺序2 "
}
此时运行代码,控制台输出 “改变dom的顺序2 最后一帧" 看到输出结果肯定开始觉得有点奇怪了
但是如果理解最后一帧的意思,就觉得正常了,所有dom操作都更新完成后
- 给vue实力添加一个watch 方法, 代码如下
watch: {
'msg': function(a,b){
console.log(a,b,"监视数据的新值,旧值得变化")
}
},
此时运行代码,控制台输出
改变dom的顺序2 hello world 监视数据的新值,旧值得变化
改变dom的顺序2 最后一帧
看到这里就会非常奇怪,为什么最后一帧, 会在watch监视数据后面打印出来
个人见解是: 当整个组件都没事了之后,下一帧(最后一帧)
- 最后我们来修改一下handler的代码
handler() {
this.msg = "改变dom的顺序1"
this.$nextTick((a,b,c)=>{ //最后一帧 ,所有的dom操作都更新完成后
console.log(this.msg, "最后一帧")
})
console.log("非dom操作1") //第四步增加的
this.msg = "改变dom的顺序2"
console.log("非dom操作2") //第四步增加的
}
此时控制台输出的是
非dom操作1
非dom操作2
改变dom的顺序2 hello world 监视数据的新值,旧值得变化
改变dom的顺序2 最后一帧
此时的输出结果比较符合这个结论===当整个组件都没事了之后,下一帧(最后一帧)
Vue nextTick 学习历程的更多相关文章
- vue api学习之nextTick的理解
对于 Vue.nextTick 方法,之前没有听说过,突然听到别人提起,貌似作用挺大.以下为学习心得.官方文档上这样定义:在下次 DOM 更新循环结束之后执行延迟回调.在修改数据之后立即使用这个方法, ...
- Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别
Vue – 基础学习(3):$forceUpdate()和$nextTick()的区别
- vue nextTick使用
Vue nextTick使用 vue生命周期 原因是在created()钩子函数执行的时候DOM 其实并未进行任何渲染,而此时进行DOM操作无异于徒劳,所以此处一定要将DOM操作的js代码放进Vue. ...
- Vue – 基础学习(1):对生命周期和钩子函的理解
一.简介 先贴一下官网对生命周期/钩子函数的说明(先贴为敬):所有的生命周期钩子自动绑定 this 上下文到实例中,因此你可以访问数据,对属性和方法进行运算.这意味着你不能使用箭头函数来定义一个生命周 ...
- 前端框架之vue初步学习
Vue.js介绍: Vue.js是一个构建数据驱动的web界面的渐进式框架.Vue.js的目标是通过尽可能简单的API实现响应的数据绑定和组合的视图组件.它不仅易于上手,还便于与第三方库或既有项目整合 ...
- 前端 | Vue nextTick 获取更新后的 DOM
前两天在开发时遇到一个需求:打开对话框的时候自动聚焦其中的输入框.由于原生的 autofocus 属性不起作用,需要使用组件库提供的 focus 方法手动手动获取焦点.于是有如下代码: <el- ...
- vue入门学习(基础篇)
vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...
- Vue.js学习笔记(2)vue-router
vue中vue-router的使用:
- Vue.js学习 Item12 – 内部响应式原理探究
深入响应式原理 大部分的基础内容我们已经讲到了,现在讲点底层内容.Vue.js 最显著的一个功能是响应系统 —— 模型只是普通对象,修改它则更新视图.这让状态管理非常简单且直观,不过理解它的原理也很重 ...
随机推荐
- 001_动力节点_SpringMVC4_SpringMVC简介
1.视频的下载地址是 下载地址:百度云盘 链接:http://pan.baidu.com/s/1ge58XW3 密码:yd5jhttp://www.java1234.com/a/javaziliao/ ...
- sklearn机器学习算法--K近邻
K近邻 构建模型只需要保存训练数据集即可.想要对新数据点做出预测,算法会在训练数据集中找到最近的数据点,也就是它的“最近邻”. 1.K近邻分类 #第三步导入K近邻模型并实例化KN对象 from skl ...
- 微信小程序点击保存图片到本地相册——踩坑
在微信小程序中要保存图片到本地相册,需要获取相册权限. 总之整个功能实现下来需要如下几个小程序的API:wx.getSetting,wx.authorize,wx.openSetting,wx.dow ...
- 03 . 二进制部署kubernetes1.18.4
简介 目前生产部署kubernetes集群主要两种方式 kubeadm Kubeadm是一个K8s部署工具,提供kubeadm init和kubeadm join,用于快速部署Kubernetes集群 ...
- mysql错误详解(1819):ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
O(∩_∩)O哈哈~ 在学习 Mysql 的时候又遇到了新问题了 o(╥﹏╥)o 当我在准备为用户授权的时候: grant all privileges on *.* to 'root'@'%' id ...
- js语法基础入门(2)
2.变量 2.1.变量的声明 声明变量的时候没有赋值,默认输出undefined //通过var 声明一个变量 var user: //默认输出undefined 可以同时声明多个变量 var use ...
- 【error fixed】E: Package 'oracle-java8-installer' has no installation candidate
问题:安装oracle-java8-installer按照如下指南失败: How To Install Java with Apt-Get on Ubuntu 16.04[https://www.di ...
- Java中保留小数点后几位
不想多说啥了..ε=(´ο`*)))唉 基础都给忘了..今天比赛 跌入十八层地狱.... 用DecimalFormat对象的format方法进行格式化.. package cn.test; impo ...
- Java嵌套类,内部类和外部类
1.嵌套类,内部类 嵌套类是指被定义在一个类内部的类: JAVA的嵌套类有很多种类:1.静态成员类:2.非静态成员类:3.匿名类:4.局部类:其中,除了静态成员类之外,其他的都是内部类,因为静态成员类 ...
- Django---进阶6
目录 聚合查询 分组查询 F与Q查询 django中如何开启事务 orm中常用字段及参数 数据库查询优化 图书管理系统 作业 聚合查询 # 聚合查询 aggregate ""&qu ...