【譯】Vue 的小奇技(第十二篇):元件建立時立即呼叫觀察者回撥

程式猿何大叔發表於2019-04-04

特別宣告:本文是作者 Alex Jover 釋出在 VueDose 上的一個系列。

版權歸作者所有。

譯者在翻譯前已經和作者溝通得到了翻譯整個系列的授權。

為了不影響大家閱讀,獲得授權的記錄會放在本文的最後。

正文

雖然 Vue.js 給我們提供了在絕大多數場景下很有用的「計算屬性」,但是在一些特殊情況中,你可能需要用到「觀察者屬性」。

預設情況下,觀察者屬性的回撥函式僅會在被觀察的屬性值發生改變時被執行,這也的確符合邏輯。

舉個例子,為 dog 這個資料屬性定義一個觀察者回撥:

export default {
  data () {
    dog: ""
  },
  watch: {
    dog (newVal, oldVal) {
      console.log(`Dog changed: ${newVal}`);
    }
  },
};
複製程式碼

程式碼到這裡都沒問題。如果你執行了上面這段程式碼,會發現 dog 的觀察者回撥函式在其值被改變時就會立即被呼叫。

然而,在一些情況下,你需要觀察者的回撥在元件被建立時就被呼叫一次。這時,你當然可以將觀察者回撥的內部邏輯單獨抽取出來放到一個函式內,然後在觀察者回撥函式和 created 鉤子函式中呼叫,但是這裡有一個更簡單的方法。

你可以使用帶選項的觀察者,在配置選項中設定 immediate 屬性為 true,該回撥將會在元件被建立之後,被立即呼叫。

export default {
  data: () => ({
    dog: ""
  }),
  watch: {
    dog: {
      handler(newVal, oldVal) {
        console.log(`Dog changed: ${newVal}`);
      },
      immediate: true
    }
  }
};
複製程式碼

正如你所見,以這種方式設定觀察者回撥,需要將回撥函式賦值給 handler 這個鍵。

你想看看在實際運用中的效果嗎?訪問這個 CodeSandbox 看看吧!

你可以線上閱讀這篇 原文,裡面有可供複製貼上的原始碼。如果你喜歡這個系列的話,請分享給你的同事們!

結語

此係列的其他文章,會同步系列官網的釋出情況,及時地翻譯釋出到掘金。請持續關注「程式猿何大叔」,相信我會給大家帶來更多優質的內容,不要忘了點贊~

如果想要了解譯者的更多,請查閱如下:

請求翻譯授權記錄

請求翻譯授權記錄

微信公眾號
覺得本文不錯的話,分享一下給小夥伴吧~

相關文章