7.vue入门基础学习笔记-视图更新执行顺序
2017-07-22 16:16
836 查看
在前面的帖子中我们讲到了属性data,计算属性computed,观察者watch,及dom相关的一些指令如v-if,v-html等
那当一个data或者computed的值发生变化到视图更新,是怎样的一个流程呢?
调试掉用顺序一定要用alert console打印是异步的 顺序可能会乱 不准确
输入 vue.show=false;
代码分析:
name的值由show决定
allNames的值由name决定
调用watch方法的时候,vue里的值已经发生变化
show值改变时会触发show.watch()方法,然后调用name.get()方法来更新name的缓存值
name值改变时会触发name.watch()方法,然后调用allNames.get()方法来更新allNames的缓存值
allNames值改变时会触发allNames.watch()方法
更新dom操作
show.watch() -> name.get() -> name.watch() -> allNames.get() -> allNames.watch() -> 视图更新
有时候我们可能需要视图更新完成之后再去做一些操作,毕竟如果操作dom,dom还不存在就会报错了,所以在watch里操作dom会有问题,我们可以使用
vm.$nextTick( [callback] ),可以在methods属性的方法里用,也可以在watch的方法里用
那当一个data或者computed的值发生变化到视图更新,是怎样的一个流程呢?
<div id="app"> {{name}} <ul> <li v-for="item in allNames">{{item}}</li> </ul> </div> var vue = new Vue({ el:'#app', data:{ show:true, }, computed:{ name:{ get:function(){ //alert("name.get()"); log("name.get()"); if(this.show){ return true; }else{ return false; } }, set:function(value){ log("name.set()"); this.name = value; //注意 这儿是个死循环, //设置name的值调用这个set //调用这个set 设置name的值 //然后继续调用这个set } }, allNames:{ get:function(){ log("allNames.get()"); //alert("allNames.get()"); if(this.name){ return ["suman","liuxiao","sumomo","other"] }else{ return ["nan","nv","nan","other"] } }, set:function(value){ log("allNames.set()"); this.name = value; } } }, watch:{ show:function(value,oldValue){ log("show.watch()"); }, name:function(value,oldValue){ log("name.watch()"); },allNames:function(value,oldValue){ log("allNames.watch()"); } } }); function log(message){ alert(message); }
调试掉用顺序一定要用alert console打印是异步的 顺序可能会乱 不准确
输入 vue.show=false;
代码分析:
name的值由show决定
allNames的值由name决定
调用watch方法的时候,vue里的值已经发生变化
show值改变时会触发show.watch()方法,然后调用name.get()方法来更新name的缓存值
name值改变时会触发name.watch()方法,然后调用allNames.get()方法来更新allNames的缓存值
allNames值改变时会触发allNames.watch()方法
更新dom操作
show.watch() -> name.get() -> name.watch() -> allNames.get() -> allNames.watch() -> 视图更新
有时候我们可能需要视图更新完成之后再去做一些操作,毕竟如果操作dom,dom还不存在就会报错了,所以在watch里操作dom会有问题,我们可以使用
vm.$nextTick( [callback] ),可以在methods属性的方法里用,也可以在watch的方法里用
new Vue({ // ... methods: { // ... example: function () { // 修改数据 this.message = 'changed' // DOM 还没有更新 this.$nextTick(function () { // DOM 现在更新了 // `this` 绑定到当前实例 this.doSomethingElse() }) } } }) new Vue({ // ... watch: { // ... example: function (value,oldValue) { // DOM 还没有更新 this.$nextTick(function () { // DOM 现在更新了 // `this` 绑定到当前实例 this.doSomethingElse() }) } } })
相关文章推荐
- (大数据工程师学习路径)第一步 Linux 基础入门----命令执行顺序控制与管道
- 5.3.vue入门基础学习笔记-基础指令介绍(属性绑定v-bind)
- Odoo10学习笔记一:入门与基础视图格式
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- UI基础:UI程序执行顺序(UIApplicationMain()函数),自定义视图 分类: iOS学习-UI 2015-07-02 22:09 68人阅读 评论(0) 收藏
- java 从零开始,学习笔记之基础入门<SQL_Server_视图_函数_存储过程_触发器等>(二十三)
- [原]java专业程序代写(qq:928900200),学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- java 从零开始,学习笔记之基础入门<Oracle_函数_触发器_游标_存储过程_视图>(三十五)
- 【学习笔记】零基础C#窗口程序开发入门
- 入门基础学习 ExtJS笔记(一)
- (JAVA SE 学习笔记)Java.SE.第001讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行
- MVC学习笔记之入门篇(二)mvc3相关介绍以及基础知识篇
- 重新整理后的Oracle OAF学习笔记——4.应用构建基础之实现视图
- 关于SQLServer2005的学习笔记——约束、Check、触发器的执行顺序
- 黑马程序员之C#编程基础学习笔记:将一个字符串数组的元素的顺序进行反转。
- VC++学习笔记之MFC应用程序创建/执行顺序和MFC运行机制
- ArcGIS API for Silverlight 入门学习笔记(三):基础地图实例
- MFC学习笔记之:MFC最基本动作(如创建窗口,点击取消等)函数的执行顺序
- 顺序程序设计02 - 零基础入门学习C语言08
- 顺序程序设计03 - 零基础入门学习C语言09