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

Vue中的偵聽器及使用場景

 更新時間:2023年05月05日 09:53:49   作者:自xing且樂觀~  
Vue中的偵聽器是一種響應式機制,可以對指定的數(shù)據(jù)進行監(jiān)聽,并在數(shù)據(jù)變化時執(zhí)行相應的回調(diào)函數(shù)。常用于監(jiān)聽復雜數(shù)據(jù)類型的變化,如對象和數(shù)組。通過偵聽器,可以實現(xiàn)數(shù)據(jù)的自動更新和邏輯處理等功能,提高代碼的可讀性和可維護性

基本示例?

計算屬性允許我們聲明性地計算衍生值。然而在有些情況下,我們需要在狀態(tài)變化時執(zhí)行一些“副作用”:例如更改 DOM,或是根據(jù)異步操作的結果去修改另一處的狀態(tài)。

在選項式 API 中,我們可以使用watch 選項在每次響應式屬性發(fā)生變化時觸發(fā)一個函數(shù)。

export default {
  data() {
    return {
      question: '',
      answer: 'Questions usually contain a question mark. ;-)'
    }
  },
  watch: {
    // 每當 question 改變時,這個函數(shù)就會執(zhí)行
    question(newQuestion, oldQuestion) {
      if (newQuestion.includes('?')) {
        this.getAnswer()
      }
    }
  },
  methods: {
    async getAnswer() {
      this.answer = 'Thinking...'
      try {
        const res = await fetch('https://yesno.wtf/api')
        this.answer = (await res.json()).answer
      } catch (error) {
        this.answer = 'Error! Could not reach the API. ' + error
      }
    }
  }
}
<p>
  Ask a yes/no question:
  <input v-model="question" />
</p>
<p>{{ answer }}</p>

watch選項也支持把鍵設置成用.分隔的路徑:

export default {
  watch: {
    // 注意:只能是簡單的路徑,不支持表達式。
    'some.nested.key'(newValue) {
      // ...
    }
  }
}

深層偵聽器?

watch默認是淺層的:被偵聽的屬性,僅在被賦新值時,才會觸發(fā)回調(diào)函數(shù)——而嵌套屬性的變化不會觸發(fā)。如果想偵聽所有嵌套的變更,你需要深層偵聽器:

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

謹慎使用

深度偵聽需要遍歷被偵聽對象中的所有嵌套的屬性,當用于大型數(shù)據(jù)結構時,開銷很大。因此請只在必要時才使用它,并且要留意性能。

即時回調(diào)的偵聽器?

watch默認是懶執(zhí)行的:僅當數(shù)據(jù)源變化時,才會執(zhí)行回調(diào)。但在某些場景中,我們希望在創(chuàng)建偵聽器時,立即執(zhí)行一遍回調(diào)。舉例來說,我們想請求一些初始數(shù)據(jù),然后在相關狀態(tài)更改時重新請求數(shù)據(jù)。

我們可以用一個對象來聲明偵聽器,這個對象有handler方法和immediate: true選項,這樣便能強制回調(diào)函數(shù)立即執(zhí)行:

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

回調(diào)函數(shù)的初次執(zhí)行就發(fā)生在created鉤子之前。Vue 此時已經(jīng)處理了data,computedmethods選項,所以這些屬性在第一次調(diào)用時就是可用的。

回調(diào)的觸發(fā)時機?

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

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

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

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

this.$watch()?

我們也可以使用組件實例的$watch() 方法來命令式地創(chuàng)建一個偵聽器:

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

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

停止偵聽器?

watch選項或者$watch()實例方法聲明的偵聽器,會在宿主組件卸載時自動停止。因此,在大多數(shù)場景下,你無需關心怎么停止它。

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

const unwatch = this.$watch('foo', callback)
// ...當該偵聽器不再需要時
unwatch()

到此這篇關于Vue中的偵聽器及使用場景的文章就介紹到這了,更多相關Vue偵聽器內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Vue中偵聽器的基本用法示例

    Vue中偵聽器的基本用法示例

    隨著Vue的使用越來越多,對Vue的其他知識點也開始逐漸多了解一點,這次做頁面上的計算,用了Watch偵聽器,這篇文章主要給大家介紹了關于Vue中偵聽器基本用法的相關資料,需要的朋友可以參考下
    2021-08-08
  • 詳解如何優(yōu)雅的進行Vue的狀態(tài)管理

    詳解如何優(yōu)雅的進行Vue的狀態(tài)管理

    隨著項目的發(fā)展和復雜性的增加,對 Vuex 進行更深入的了解和使用就變得非常重要,本篇文章將帶您探索 Vuex 的進階使用,包括模塊化、命名空間、getter 的高級用法等,需要的朋友可以參考下
    2023-09-09
  • Vue3+vite路由配置優(yōu)化(自動化導入)

    Vue3+vite路由配置優(yōu)化(自動化導入)

    這篇文章主要介紹了Vue3+vite路由配置優(yōu)化(自動化導入),需要的朋友可以參考下
    2023-09-09
  • el-form中的rules未生效的解決方法

    el-form中的rules未生效的解決方法

    本文主要介紹了el-form中的rules未生效的解決方法,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2023-02-02
  • Vue lazyload圖片懶加載實例詳解

    Vue lazyload圖片懶加載實例詳解

    本文通過實例代碼給大家介紹了Vue lazyload圖片懶加載的相關知識,通過導入配置等操作src/main.jswenj ,代碼簡單易懂,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2021-12-12
  • vue ssr服務端渲染(小白解惑)

    vue ssr服務端渲染(小白解惑)

    這篇文章主要介紹了vue ssr服務端渲染(小白解惑),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-11-11
  • 解決vue+elementui項目打包后樣式變化問題

    解決vue+elementui項目打包后樣式變化問題

    這篇文章主要介紹了解決vue+elementui項目打包后樣式變化問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08
  • vue?3.0?使用ref獲取dom元素的示例

    vue?3.0?使用ref獲取dom元素的示例

    這篇文章主要介紹了vue?3.0?使用ref獲取dom元素,包括vue2.x獲取dom和vue3.0獲取單個dom,通過示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2022-08-08
  • wepy--用vantUI 實現(xiàn)上彈列表并選擇相應的值操作

    wepy--用vantUI 實現(xiàn)上彈列表并選擇相應的值操作

    這篇文章主要介紹了wepy--用vantUI 實現(xiàn)上彈列表并選擇相應的值操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-11-11
  • 解決vue項目中某一頁面不想引用公共組件app.vue的問題

    解決vue項目中某一頁面不想引用公共組件app.vue的問題

    這篇文章主要介紹了解決vue項目中某一頁面不想引用公共組件app.vue的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-08-08

最新評論

湖北省| 临泉县| 义乌市| 安塞县| 泉州市| 嘉兴市| 九寨沟县| 广安市| 隆尧县| 南华县| 庆城县| 石棉县| 凤阳县| 新邵县| 诸暨市| 嘉祥县| 台东市| 驻马店市| 巨鹿县| 滦南县| 宜丰县| 武乡县| 安岳县| 和平区| 杭州市| 永顺县| 资源县| 通州市| 通城县| 渝北区| 四川省| 河间市| 长子县| 游戏| 穆棱市| 调兵山市| 旺苍县| 磐安县| 斗六市| 江北区| 竹北市|