中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Vue中的偵聽器及使用場景是什么

發布時間:2023-05-05 10:19:02 來源:億速云 閱讀:114 作者:iii 欄目:開發技術

這篇文章主要講解了“Vue中的偵聽器及使用場景是什么”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Vue中的偵聽器及使用場景是什么”吧!

基本示例

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

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

export default {
  data() {
    return {
      question: '',
      answer: 'Questions usually contain a question mark. ;-)'
    }
  },
  watch: {
    // 每當 question 改變時,這個函數就會執行
    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默認是淺層的:被偵聽的屬性,僅在被賦新值時,才會觸發回調函數&mdash;&mdash;而嵌套屬性的變化不會觸發。如果想偵聽所有嵌套的變更,你需要深層偵聽器:

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

謹慎使用

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

即時回調的偵聽器

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

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

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

回調函數的初次執行就發生在created鉤子之前。Vue 此時已經處理了data,computedmethods選項,所以這些屬性在第一次調用時就是可用的。

回調的觸發時機

當你更改了響應式狀態,它可能會同時觸發 Vue 組件更新和偵聽器回調。

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

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

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

this.$watch()

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

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

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

停止偵聽器

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

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

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

感謝各位的閱讀,以上就是“Vue中的偵聽器及使用場景是什么”的內容了,經過本文的學習后,相信大家對Vue中的偵聽器及使用場景是什么這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

vue
AI

全南县| 雷州市| 宁乡县| 巩义市| 清水县| 信丰县| 黑山县| 乾安县| 邳州市| 新巴尔虎左旗| 汝州市| 舒城县| 建瓯市| 泰兴市| 建始县| 山西省| 泽普县| 苍南县| 石河子市| 上思县| 平泉县| 临泽县| 克拉玛依市| 抚州市| 得荣县| 稷山县| 新绛县| 乐亭县| 桐庐县| 永丰县| 信阳市| 金华市| 嵊州市| 建宁县| 怀宁县| 嘉善县| 江阴市| 吐鲁番市| 石河子市| 江北区| 卫辉市|