欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

詳解vue中$nextTick和$forceUpdate的用法

 更新時間:2019年12月11日 11:19:14   作者:world_7735  
這篇文章主要介紹了詳解vue中$nextTick和$forceUpdate的用法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧

1、$nextTick

vm.$nextTick( [callback] )

this.$nextTick()將回調(diào)延遲到下次 DOM 更新循環(huán)之后執(zhí)行,在修改數(shù)據(jù)之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一樣,不同的是回調(diào)的 this 自動綁定到調(diào)用它的實例上。

應(yīng)用場景:

1、 在Vue生命周期的created()鉤子函數(shù)進行的DOM操作一定要放在Vue.nextTick()的回調(diào)函數(shù)中。
2、 因為在created()鉤子函數(shù)執(zhí)行的時候DOM 其實并未進行任何渲染,而此時進行DOM操作無異于徒勞,所以此處一定要將

DOM操作的js代碼放進Vue.nextTick()的回調(diào)函數(shù)中。與之對應(yīng)的就是mounted()鉤子函數(shù),因為該鉤子函數(shù)執(zhí)行時所有的DOM掛載和渲染都已完成,此時在該鉤子函數(shù)中進行任何DOM操作都不會有問題 。

在數(shù)據(jù)變化后要執(zhí)行的某個操作,而這個操作需要使用隨數(shù)據(jù)改變而改變的DOM結(jié)構(gòu)的時候,這個操作都應(yīng)該放進Vue.nextTick()的回調(diào)函數(shù)中。

<html>
  <head>
      <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
      <section>
        <div ref="hello">
         <h1>Hello World ~</h1>
        </div>
        <button type="danger" @click="get">點擊</button>
       </section>
     </div>
  </body>
</html>
<script>
new Vue({
 el: '#app',
 methods: {
   get() {
    console.log(0);
   }
  },
  mounted() {
   console.log(333);
   console.log(this.$refs['hello']);
   this.$nextTick(() => {
    console.log(444);
    console.log(this.$refs['hello']);
   });
  },
  created() {
   console.log(111);
   console.log(this.$refs['hello']);
   this.$nextTick(() => {
    console.log(222);
    console.log(this.$refs['hello']);
   });
  }
})
</script>

可以根據(jù)打印的順序看到,在created()鉤子函數(shù)執(zhí)行的時候DOM 其實并未進行任何渲染,而此時進行DOM操作并無作用,而在created()里使用this.$nextTick()可以等待dom生成以后再來獲取dom對象。

<html>
  <head>
      <script src="https://cdn.staticfile.org/vue/2.2.2/vue.min.js"></script>
  </head>
  <body>
    <div id="app">
      <section>
        <h1 ref="hello">{{ value }}</h1>
        <button type="danger" @click="get">點擊</button>
       </section>
     </div>
  </body>
</html>
<script>
new Vue({
 el: '#app',
 data() {
   return {
    value: 'Hello World ~'
   };
  },
  methods: {
   get() {
    this.value = '你好啊';
    console.log(this.$refs['hello'].innerText);
    this.$nextTick(() => {
     console.log(this.$refs['hello'].innerText);
    });
   }
  },
  mounted() {
  },
  created() {
  }
})
</script>

this.$nextTick()在頁面交互,尤其是從后臺獲取數(shù)據(jù)后重新生成dom對象之后的操作有很大的優(yōu)勢。

2、this.$forceUpdate()

迫使Vue實例重新(rander)渲染虛擬DOM,注意并不是重新加載組件。結(jié)合vue的生命周期,調(diào)用$forceUpdate后只會觸發(fā)beforeUpdate和updated這兩個鉤子函數(shù),不會觸發(fā)其他的鉤子函數(shù)。它僅僅影響實例本身和插入插槽內(nèi)容的子組件,而不是所有子組件;

應(yīng)用場景: 當在data里沒有顯示的聲明一個對象的屬性,而是之后給該對象添加屬性,這種情況vue是檢測不到數(shù)據(jù)變化的,可以使用$forceUpdate()

html:
<span class="test">{{egData.value}}</span>
<el-button @click="changeData">改變</el-button>
 -------------------------------
js:
data(){
 return {
 egData: {}
}
 }
-------------------------------
 
 methods:{
changeData () {
  this.egData.value = 'oldValue'
  this.$forceUpdate() // dom會更新
}
}

但是這種做法并不推薦,官方說如果你現(xiàn)在的場景需要用forceUpdate方法 ,那么99%是你的操作有問題,如上data里不顯示聲明對象的屬性,之后添加屬性時正確的做法時用 vm.$set() 方法,所以forceUpdate請慎用。

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • Vue2.0點擊切換類名改變樣式的方法

    Vue2.0點擊切換類名改變樣式的方法

    今天小編就為大家分享一篇Vue2.0點擊切換類名改變樣式的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 在Vue中使用Echarts可視化庫的完整步驟記錄

    在Vue中使用Echarts可視化庫的完整步驟記錄

    這篇文章主要給大家介紹了關(guān)于在Vue中使用Echarts可視化庫的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11
  • 基于vue-video-player自定義播放器的方法

    基于vue-video-player自定義播放器的方法

    這篇文章主要介紹了基于vue-video-player自定義播放器的方法,主要是基于video.js開發(fā)的vue-video-player的使用,以及如何操作video.js中的api。需要的朋友可以參考下
    2018-03-03
  • 利用vue3仿蘋果系統(tǒng)側(cè)邊消息提示效果實例

    利用vue3仿蘋果系統(tǒng)側(cè)邊消息提示效果實例

    這篇文章主要給大家介紹了關(guān)于如何利用vue3仿蘋果系統(tǒng)側(cè)邊消息提示效果的相關(guān)資料,文中通過實例代碼以及圖文介紹的非常詳細,對大家學習或者使用vue3具有一定的參考學習價值,需要的朋友可以參考下
    2021-12-12
  • Vue將props值實時傳遞 并可修改的操作

    Vue將props值實時傳遞 并可修改的操作

    這篇文章主要介紹了Vue將props值實時傳遞 并可修改的操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • Vue 計算屬性 computed

    Vue 計算屬性 computed

    這篇文章主要介紹了Vue 計算屬性 computed,一般情況下屬性都是放到data中的,但是有些屬性可能是需要經(jīng)過一些邏輯計算后才能得出來,那么我們可以把這類屬性變成計算屬性,下面我們來看看具體實例,需要的朋友可以參考一下
    2021-10-10
  • vue項目配置eslint保存自動格式化問題

    vue項目配置eslint保存自動格式化問題

    這篇文章主要介紹了vue項目配置eslint保存自動格式化問題,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-09-09
  • Vue3實現(xiàn)九宮格抽獎的示例代碼

    Vue3實現(xiàn)九宮格抽獎的示例代碼

    這篇文章主要為大家詳細介紹了如何利用Vue3實現(xiàn)九宮格抽獎的功能,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的可以了解一下
    2022-09-09
  • Vue3 編寫自定義指令插件的示例代碼

    Vue3 編寫自定義指令插件的示例代碼

    這篇文章主要介紹了Vue3 編寫自定義指令插件的示例代碼,主要包括編寫自定義插件,在 main.ts 中加載啟用插件的代碼介紹,對Vue3自定義指令插件相關(guān)知識感興趣的朋友一起看看吧
    2022-07-07
  • 某些場景下建議vue query代替pinia原理解析

    某些場景下建議vue query代替pinia原理解析

    這篇文章主要為大家介紹了某些場景下建議vue-query代替pinia原理解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-02-02

最新評論