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

vue中watch監(jiān)聽(tīng)器用法之deep、immediate、flush

 更新時(shí)間:2022年09月22日 09:18:52   作者:前端打工人  
Vue是可以監(jiān)聽(tīng)到多層級(jí)數(shù)據(jù)改變的,且可以在頁(yè)面上做出對(duì)應(yīng)展示,下面這篇文章主要給大家介紹了關(guān)于vue中watch監(jiān)聽(tīng)器用法之deep、immediate、flush的相關(guān)資料,需要的朋友可以參考下

一、watch 默認(rèn)是淺層,使用deep深層監(jiān)聽(tīng)

被偵聽(tīng)的 property,僅在被賦新值時(shí),才會(huì)觸發(fā)回調(diào)函數(shù)——而嵌套 property 的變化不會(huì)觸發(fā)。如果想偵聽(tīng)所有嵌套的變更,你需要深層偵聽(tīng)器:設(shè)置deep: true

export default {
  watch: {
    someObject: {
      handler(newValue, oldValue) {
        // 注意:在嵌套的變更中,
        // 只要沒(méi)有替換對(duì)象本身,
        // 那么這里的 `newValue` 和 `oldValue` 相同
      },
      deep: true
    }
  }
}

注意:深度偵聽(tīng)需要遍歷被偵聽(tīng)對(duì)象中的所有嵌套的 property,當(dāng)用于大型數(shù)據(jù)結(jié)構(gòu)時(shí),開(kāi)銷很大。因此請(qǐng)只在必要時(shí)才使用它,并且要留意性能。

二、watch 默認(rèn)是懶偵聽(tīng),使用immediate即時(shí)回調(diào)偵聽(tīng)

最初綁定的時(shí)候是不會(huì)執(zhí)行的,要等到 監(jiān)聽(tīng)的屬性 改變時(shí)才執(zhí)行監(jiān)聽(tīng)計(jì)算。那我們想要一開(kāi)始就讓他最初綁定的時(shí)候就執(zhí)行改怎么辦呢?

immediate表示在watch中首次綁定的時(shí)候,是否執(zhí)行handler,值為true則表示在watch中聲明的時(shí)候,就立即執(zhí)行handler方法,值為false,則和一般使用watch一樣,在數(shù)據(jù)發(fā)生變化的時(shí)候才執(zhí)行handler。

export default {
  // ...
  watch: {
    question: {
      handler(newQuestion) {
        // 在組件實(shí)例創(chuàng)建時(shí)會(huì)立即調(diào)用
      },
      // 強(qiáng)制立即執(zhí)行回調(diào)
      immediate: true
    }
  }
  // ...
}

三、回調(diào)的刷新時(shí)機(jī)flush: 'post'

當(dāng)你更改了響應(yīng)式狀態(tài),它可能會(huì)同時(shí)觸發(fā) Vue 組件更新和偵聽(tīng)器回調(diào)。

默認(rèn)情況下,用戶創(chuàng)建的偵聽(tīng)器回調(diào),都會(huì)在 Vue 組件更新之前被調(diào)用。這意味著你在偵聽(tīng)器回調(diào)中訪問(wèn)的 DOM 將是被 Vue 更新之前的狀態(tài)。

如果想在偵聽(tīng)器回調(diào)中能訪問(wèn)被 Vue 更新之后的DOM,你需要指明 flush: 'post' 選項(xiàng):

export default {
  // ...
  watch: {
    key: {
      handler() {},
      flush: 'post'
    }
  }
}

四、this.$watch()

我們也可以使用組件實(shí)例的 $watch() 方法來(lái)命令式地創(chuàng)建一個(gè)偵聽(tīng)器:

export default {
  created() {
    this.$watch('question', (newQuestion) => {
      // ...
    })
  }
}

如果要在特定條件下設(shè)置一個(gè)偵聽(tīng)器,或者只偵聽(tīng)響應(yīng)用戶交互的內(nèi)容,這方法很有用。它還允許你提前停止該偵聽(tīng)器。

五、停止偵聽(tīng)器

用 watch 選項(xiàng)或者 $watch() 實(shí)例方法聲明的偵聽(tīng)器,會(huì)在宿主組件卸載時(shí)自動(dòng)停止。因此,在大多數(shù)場(chǎng)景下,你無(wú)需關(guān)心怎么停止它。

在少數(shù)情況下,你的確需要在組件卸載之前就停止一個(gè)偵聽(tīng)器,這時(shí)可以調(diào)用 $watch() API 返回的函數(shù):

const unwatch = this.$watch('foo', callback)

// ...當(dāng)該偵聽(tīng)器不再需要時(shí)
unwatch()

補(bǔ)充:這里一般使用最多的是deep:true,處理對(duì)象內(nèi)部屬性的變化,常用寫(xiě)法如下:

watch:{
// 對(duì)象的監(jiān)聽(tīng),采用deep:true
obj: {
    handler:function(newVal){//監(jiān)聽(tīng)到屬性變化進(jìn)行邏輯處理},
    deep:true
 },
 'obj.name': {
    handler:function(newVal){//監(jiān)聽(tīng)到屬性變化進(jìn)行邏輯處理},
 }
}

總結(jié)

到此這篇關(guān)于vue中watch監(jiān)聽(tīng)器用法之deep、immediate、flush的文章就介紹到這了,更多相關(guān)vue watch監(jiān)聽(tīng)器用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評(píng)論

正阳县| 永和县| 乌恰县| 宜良县| 都安| 余庆县| 四子王旗| 灵寿县| 响水县| 随州市| 普定县| 湘阴县| 乐业县| 巴楚县| 梅州市| 新津县| 拉孜县| 同仁县| 通山县| 乐清市| 镇原县| 灵台县| 尉犁县| 宁乡县| 新蔡县| 本溪市| 东丽区| 新野县| 托里县| 会昌县| 江口县| 娱乐| 油尖旺区| 富顺县| 龙井市| 亚东县| 左云县| 和田县| 巨鹿县| 铜梁县| 穆棱市|