详解Vue + Vuex 如何使用 vm.$nextTick


Posted in Javascript onNovember 20, 2017

vm.$nextTick

简单说,因为DOM至少会在当前tick里面的代码全部执行完毕再更新。所以不可能做到在修改数据后并且DOM更新后再执行,要保证在DOM更新以后再执行某一块代码,就必须把这块代码放到下一次事件循环里面,比如setTimeout(fn, 0),这样DOM更新后,就会立即执行这块代码。

//改变数据 
vm.message = 'changed' 
 
//想要立即使用更新后的DOM。这样不行,因为设置message后DOM还没有更新 
console.log(vm.$el.textContent) // 并不会得到'changed' 
 
//这样可以,nextTick里面的代码会在DOM更新后执行 
Vue.nextTick(function(){ 
  console.log(vm.$el.textContent) //可以得到'changed' 
})

vm.$nextTick 的作用是将回调延迟到下次 DOM 更新循环之后执行。

正常在 ready/mounted 中获取数据, 那么操作是很简单的

ready() { // vue2 为 mounted() {
  var request = $.ajax({
    type: "POST",
    dataType: 'json',
    url: "api.php"
  });
  request.then((json) => {
    // balabala
    this.$nextTick(function () {
      // balabala
    })
  });
}

如果是用 vuex 的话, 由于vuex的数据操作都在 action 和 mutations, 然后在 ready/mounted 中调用 action 里的函数, 那么这时候该怎么用 vm.$nextTick 呢?

这时候我们就需要用到 Promise 了, 具体代码如下:

首页是api.js

export default {
  getFromConfig(config) {
    return $.ajax({ data: config })
  }
}

然后是action.js

export const getArticleList = ({dispatch}, config) => {
  return api.getFromConfig(config).then(({data}) => {
    dispatch(types.RECEIVE_ARTICLE, data, config.page)
  })
}

这里一定要加上return, 这样就可以返回一个Promise对象

最后是vue组件

methods: {
  loadMore(page = this.page) {
    var id = this.$route.params.id || ""
    Promise.all([
      this.getArticleList({
        id: id,
        page: page
      })
    ]).then(() => {
      this.$nextTick(function () {
        // balabala
      })
    })
  }
}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
javascript 遍历验证所有文本框的值
Aug 27 Javascript
JavaScript中的console.assert()函数介绍
Dec 29 Javascript
javascript弹出拖动窗口
Aug 11 Javascript
jquery+json实现动态商品内容展示的方法
Jan 14 Javascript
jQuery+Ajax实现限制查询间隔的方法
Jun 07 Javascript
微信小程序 location API实例详解
Oct 02 Javascript
Angular 封装并发布组件的方法示例
Apr 19 Javascript
vue中element 上传功能的实现思路
Jul 06 Javascript
vuejs使用axios异步访问时用get和post的实例讲解
Aug 09 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
Jul 16 Javascript
vue视频播放插件vue-video-player的具体使用方法
Nov 08 Javascript
JS 事件机制完整示例分析
Jan 15 Javascript
webpack+vue中使用别名路径引用静态图片地址
Nov 20 #Javascript
laydate日历控件使用方法详解
Nov 20 #Javascript
JavaScript框架Angular和React深度对比
Nov 20 #Javascript
如何选择适合你的JavaScript框架
Nov 20 #Javascript
JavaScript内存泄漏的处理方式
Nov 20 #Javascript
加载 vue 远程代码的组件实例详解
Nov 20 #Javascript
jquery中有哪些api jQuery主要API
Nov 20 #jQuery
You might like
数据库相关问题
2006/10/09 PHP
无数据库的详细域名查询程序PHP版(3)
2006/10/09 PHP
《PHP编程最快明白》第六讲:Mysql数据库操作
2010/11/01 PHP
PHP 面向对象程序设计(oop)学习笔记 (五) - PHP 命名空间
2014/06/12 PHP
PHP弱类型语言中类型判断操作实例详解
2017/08/10 PHP
jQuery基本过滤选择器使用介绍
2013/04/18 Javascript
js innerHTML 改变div内容的方法
2013/08/03 Javascript
node.js中的fs.closeSync方法使用说明
2014/12/17 Javascript
jQuery实现固定在网页顶部的菜单效果代码
2015/09/02 Javascript
js处理层级数据结构的方法小结
2017/01/17 Javascript
Vue插件写、用详解(附demo)
2017/03/20 Javascript
React props和state属性的具体使用方法
2018/04/12 Javascript
javascript中的this作用域详解
2019/07/15 Javascript
js实现百度淘宝搜索功能
2020/02/17 Javascript
[26:21]浴火之凤-TI4世界冠军Newbee战队纪录片
2014/08/07 DOTA
对pandas的算术运算和数据对齐实例详解
2018/12/22 Python
详解python 模拟豆瓣登录(豆瓣6.0)
2019/04/18 Python
Python3+Appium安装使用教程
2019/07/05 Python
python+logging+yaml实现日志分割
2019/07/22 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
Python ArgumentParse的subparser用法说明
2020/04/20 Python
python读取excel进行遍历/xlrd模块操作
2020/07/12 Python
python编写实现抽奖器
2020/09/10 Python
python对批量WAV音频进行等长分割的方法实现
2020/09/25 Python
python uuid生成唯一id或str的最简单案例
2021/01/13 Python
如何用Python徒手写线性回归
2021/01/25 Python
Pytorch - TORCH.NN.INIT 参数初始化的操作
2021/02/27 Python
CSS3制作日历实现代码
2012/01/21 HTML / CSS
Gloeilampgoedkoop荷兰:在线购买灯泡
2019/02/16 全球购物
亚洲领先的旅游体验市场:Voyagin
2019/11/23 全球购物
商业活动邀请函
2014/02/04 职场文书
关于旅游的活动方案
2014/08/15 职场文书
2015年小学数学教研组工作总结
2015/05/21 职场文书
2016年世界人口日宣传活动总结
2016/04/05 职场文书
SQL写法--行行比较
2021/08/23 SQL Server
使用CSS实现百叶窗效果示例代码
2023/05/07 HTML / CSS