最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

深入學習Vue nextTick的用法及原理

 更新時間:2019年10月08日 08:23:14   作者:有夢想的咸魚前端  
這篇文章主要介紹了深入學習Vue nextTick的用法及原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

Vue.nextTick是Vue官方給我們提供的一個API(方法),作用是在下次DOM更新循環(huán)結束之后執(zhí)行延遲回調。在修改數據之后立即使用這個方法,獲取更新后的DOM;

那么我們的理解是:當數據發(fā)生變化之后,DOM視圖并不會立即更新,如果我們在發(fā)生變化之后立馬去獲取某個節(jié)點或者某個節(jié)點的值,很有可能結果就是undefined;因為Vue實現響應式并不是數據發(fā)生變化之后DOM立即變化,而是按一定的策略進行DOM的更新;

來看一個小demo:

App.vue 

<template>
 <div id="app">
    <div ref="message">{{msg}}</div>
    <div v-if="msg1">{{msg1}}</div>
    <button @click="changeMsg">Change the Message</button>
 </div>
</template>

<script>
export default {
 name: 'App',
 data(){
  return {
   msg:"Hello Vue",
   msg1: '',
  }
 },
 methods:{
  changeMsg(){
   this.msg='hello world';
   this.msg1=this.$refs.message.innerHTML;
    console.log("更新DOM之前:"+this.msg1)
  }
 }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

我們通過運行代碼能夠看到當我們不在this.$nextTick方法里面進行DOM操作的時候,this.$refs.message.innerHTML的值存儲的還是之前的初始值;

修改代碼:

App.vue  

<template>
 <div id="app">
    <div ref="message">{{msg}}</div>
    <div v-if="msg1">{{msg1}}</div>
    <button @click="changeMsg">Change the Message</button>
 </div>
</template>

<script>
export default {
 name: 'App', 
 data(){
  return {
   msg:"Hello Vue",
   msg1: '',
  }
 },
 methods:{
  changeMsg(){
   this.msg='hello world';
   // this.msg1=this.$refs.message.innerHTML;
   // console.log("更新DOM之前:"+this.msg1)
    this.$nextTick(()=>{
     this.msg1=this.$refs.message.innerHTML;
     console.log("更新DOM之后:"+this.msg1)
    })
  }
 }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

修改代碼之后我們可以發(fā)現,使用this.$nextTick很容易的就接收到了更新后的值,正如官網解釋:在下次DOM更新循環(huán)結束之后執(zhí)行延遲回調。在修改數據之后立即使用這個方法,獲取更新后的DOM;

再來修改代碼對比一下:

App.vue

<template>
 <div id="app">
    <div ref="message">{{msg}}</div>
    <div v-if="msg1">{{msg1}}</div>
    <button @click="changeMsg">Change the Message</button>
 </div>
</template>

<script>
export default {
 name: 'App', 
 data(){
  return {
   msg:"Hello Vue",
   msg1: '',
  }
 },
 methods:{
  changeMsg(){
   this.msg='hello world';
   this.msg1=this.$refs.message.innerHTML;
    console.log("更新DOM之前:"+this.msg1)
    this.$nextTick(()=>{
     this.msg1=this.$refs.message.innerHTML;
     console.log("更新DOM之后:"+this.msg1)
    })
  }
 }
}
</script>

<style>
#app {
 font-family: 'Avenir', Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
</style>

經過修改代碼,我們現在可以很容易看出來this.$nextTick(callback)的作用,callback是回調函數也就是我們要進行操作DOM的事情;

應用場景:

在vue的生命周期鉤子函數created()中進行DOM操作的時候一定要把DOM操作放入到this.$nextTick()中;

因為在created鉤子函數觸發(fā)的時候,DOM是沒有進行渲染的;DOM沒有進行渲染,然后進行DOM操作無疑是徒勞的;

所以我們在created中進行DOM操作的時候,一定要將DOM操作放入到this.$nextTick()中;

與之相反的是mounted,因為當觸發(fā)mounted的時候,DOM的掛載和渲染都已經完成了,所以在mounted中進行DOM操作是不會有任何問題的;

因為DOM更新是異步的,像v-if指令判斷增刪DOM元素,我們在方法中給變量賦值的時候,如果不使用this.$nextTick(),我們很有可能拿到的還是初始值,如果想拿到更新后的值,需要使用this.$nextTick()方法

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

相關文章

  • Vue-router中hash模式與history模式的區(qū)別詳解

    Vue-router中hash模式與history模式的區(qū)別詳解

    這篇文章主要給大家介紹了關于Vue-router中hash模式與history模式區(qū)別的相關資料,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-12-12
  • vue項目報錯:Missing?script:"serve"的解決辦法

    vue項目報錯:Missing?script:"serve"的解決辦法

    這篇文章主要給大家介紹了關于vue項目報錯:Missing?script:"serve"的解決辦法,"missing script: serve"是一個錯誤信息,意味著在執(zhí)行啟動腳本時,找不到名為"serve"的腳本,需要的朋友可以參考下
    2023-11-11
  • vue axios 在頁面切換時中斷請求方法 ajax

    vue axios 在頁面切換時中斷請求方法 ajax

    下面小編就為大家分享一篇vue axios 在頁面切換時中斷請求方法 ajax,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • Vue3?重構函數透傳示例解析

    Vue3?重構函數透傳示例解析

    這篇文章主要為大家介紹了Vue3?重構函數透傳示例解析
    2023-02-02
  • VUE3頁面div如何點擊改變樣式

    VUE3頁面div如何點擊改變樣式

    這篇文章主要介紹了VUE3頁面div如何點擊改變樣式問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-03-03
  • Nuxt3嵌套路由,報錯Failed?to?resolve?component:?NuxtChild的解決

    Nuxt3嵌套路由,報錯Failed?to?resolve?component:?NuxtChild的解決

    這篇文章主要介紹了Nuxt3嵌套路由,報錯Failed?to?resolve?component:?NuxtChild的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2023-06-06
  • Vue.js?模板語法和數據綁定

    Vue.js?模板語法和數據綁定

    這篇文章主要介紹了Vue.js?模板語法和數據綁定,文章圍繞主題展開詳細的內容介紹,具有一定的參考價值,需要的小伙伴可以參考一下
    2022-05-05
  • 把vue-router和express項目部署到服務器的方法

    把vue-router和express項目部署到服務器的方法

    下面小編就為大家分享一篇把vue-router和express項目部署到服務器的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-02-02
  • Vue 第三方字體圖標引入 Font Awesome的方法

    Vue 第三方字體圖標引入 Font Awesome的方法

    今天小編就為大家分享一篇Vue 第三方字體圖標引入 Font Awesome的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • 使用vue3指令封裝一個圖片預覽功能

    使用vue3指令封裝一個圖片預覽功能

    這篇文章主要為大家詳細介紹了如何使用?vue3?指令封裝一個后臺管理系統圖片預覽功能,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學習一下
    2024-01-01

最新評論

禄劝| 临江市| 南涧| 驻马店市| 彭山县| 潮安县| 东乡县| 水富县| 循化| 顺平县| 浠水县| 平江县| 平罗县| 林周县| 永泰县| 靖远县| 灵川县| 包头市| 唐河县| 镇远县| 绥阳县| 浦江县| 德保县| 博罗县| 梨树县| 嘉鱼县| 松桃| 西宁市| 公主岭市| 阜新市| 墨玉县| 乡城县| 赤壁市| 安义县| 新巴尔虎左旗| 汉沽区| 呈贡县| 合江县| 杂多县| 景泰县| 龙川县|