国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

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

2019-11-19 14:53:34
字體:
來源:轉載
供稿:網友

vm.$nextTick

簡單說,因為DOM至少會在當前tick里面的代碼全部執(zhí)行完畢再更新。所以不可能做到在修改數據后并且DOM更新后再執(zhí)行,要保證在DOM更新以后再執(zhí)行某一塊代碼,就必須把這塊代碼放到下一次事件循環(huán)里面,比如setTimeout(fn, 0),這樣DOM更新后,就會立即執(zhí)行這塊代碼。

//改變數據 vm.message = 'changed'  //想要立即使用更新后的DOM。這樣不行,因為設置message后DOM還沒有更新 console.log(vm.$el.textContent) // 并不會得到'changed'  //這樣可以,nextTick里面的代碼會在DOM更新后執(zhí)行 Vue.nextTick(function(){   console.log(vm.$el.textContent) //可以得到'changed' }) 

vm.$nextTick 的作用是將回調延遲到下次 DOM 更新循環(huán)之后執(zhí)行。

正常在 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      })    })  }}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持武林網。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 盐亭县| 库车县| 郑州市| 佛教| 盐边县| 慈利县| 方城县| 米脂县| 江都市| 贵定县| 民和| 乐平市| 巩留县| 杭锦旗| 马龙县| 绥宁县| 宜阳县| 乌海市| 渭源县| 宣武区| 绿春县| 固镇县| 志丹县| 鲁甸县| 郴州市| 尚志市| 拉孜县| 灵璧县| 洮南市| 肇东市| 常州市| 萝北县| 翁牛特旗| 托克逊县| 北川| 乳山市| 阜新市| 沙洋县| 民勤县| 葵青区| 民勤县|