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

溫馨提示×

溫馨提示×

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

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

Vue中鉤子函數怎么用

發布時間:2021-07-27 14:21:34 來源:億速云 閱讀:365 作者:小新 欄目:web開發

小編給大家分享一下Vue中鉤子函數怎么用,相信大部分人都還不怎么了解,因此分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后大有收獲,下面讓我們一起去了解一下吧!

在Vue 中可以把一系列復雜的操作包裝為一個指令。

什么是復雜的操作?

我的理解是:復雜邏輯功能的包裝、違背數據驅動的 DOM 操作以及對一些 Hack 手段的掩蓋等。我們總是期望以操作數據的形式來實現功能邏輯。

鉤子函數

對于自定義指令的定義,Vue2 有 5 個可選的鉤子函數。

bind: 只調用一次,指令第一次綁定到元素時調用,用這個鉤子函數可以定義一個在綁定時執行一次的初始化動作。
inserted: 被綁定元素插入父節點時調用(父節點存在即可調用,不必存在于 document 中)。
update: 被綁定元素所在的模板更新時調用,而不論綁定值是否變化。
componentUpdated: 被綁定元素所在模板完成一次更新周期時調用。
unbind: 只調用一次,指令與元素解綁時調用。

接下來,定義一個簡單的指令以驗證這些鉤子函數的觸發時機。

template

<div id="app">
 <my-comp v-if="msg" :msg="msg"></my-comp>
 <button @click="update">更新</button>
 <button @click="uninstall">卸載</button>
 <button @click="install">安裝</button>
</div>

script

Vue.directive('hello', {
 bind: function (el) {
  console.log('bind')
 },
 inserted: function (el) {
  console.log('inserted')
 },
 update: function (el) {
  console.log('update')
 },
 componentUpdated: function (el) {
  console.log('componentUpdated')
 },
 unbind: function (el) {
  console.log('unbind')
 }
})
var myComp = {
 template: '<h2 v-hello>{{msg}}</h2>',
 props: {
  msg: String
 }
}
new Vue({
 el: '#app',
 data: {
  msg: 'Hello'
 },
 components: {
  myComp: myComp
 },
 methods: {
  update: function () {
   this.msg = 'Hi'
  },
  uninstall: function () {
   this.msg = ''
  },
  install: function () {
   this.msg = 'Hello'
  }
 }
})

頁面加載時

bind
inserted

組件更新時

點擊“更新”按鈕,更改數據觸發組件更新。

update
componentUpdated

卸載組件時

點擊“卸載”按鈕,數據置空否定判斷以觸發組件卸載。

unbind

重新安裝組件時

點擊“安裝”按鈕,數據賦值肯定判斷以觸發組件重新安裝。

bind
inserted

區別

從案例的運行中,對 5 個鉤子函數的觸發時機有了初步的認識。存疑的也就是bind和inserted、update和componentUpdated的區別了。

bind 和 inserted

據文檔所說,插入父節點時調用 inserted,來個測試。

bind: function (el) {
 console.log(el.parentNode) // null
 console.log('bind')
},
inserted: function (el) {
 console.log(el.parentNode) // <div id="app">...</div>
 console.log('inserted')
}

分別在兩個鉤子函數中輸出父節點:bind 時父節點為 null,inserted 時父節點存在。

update 和 componentUpdated

關于這兩個的介紹,從字眼上看感覺是組件更新周期有關,繼續驗證。

update: function (el) {
 console.log(el.innerHTML) // Hello
 console.log('update')
},
componentUpdated: function (el) {
 console.log(el.innerHTML) // Hi
 console.log('componentUpdated')
}

沒毛病,update 和 componentUpdated 就是組件更新前和更新后的區別。

結論

文檔說的沒錯……
Demo

最佳實踐

根據需求的不同,我們要選擇恰當的時機去初始化指令、更新指令調用參數以及釋放指令存在時的內存占用等。

比較常見的場景是:用指令包裝一些無依賴的第三方庫以擴展組件功能。而一個健壯的庫通常會包含:初始化實例、參數更新和釋放實例資源占用等操作。

Vue.directive('hello', {
 bind: function (el, binding) {
  // 在 bind 鉤子中初始化庫實例
  // 如果需要使用父節點,也可以在 inserted 鉤子中執行
  el.__library__ = new Library(el, binding.value)
 },
 update: function (el, binding) {
  // 模版更新意味著指令的參數可能被改變,這里可以對庫實例的參數作更新
  // 酌情使用 update 或 componentUpdated 鉤子
  el.__library__.setOptions(Object.assign(binding.oldValue, binding.value))
 },
 unbind: function (el) {
  // 釋放實例
  el.__library__.destory()
 }
})

以上是“Vue中鉤子函數怎么用”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!

向AI問一下細節

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

AI

兰考县| 仲巴县| 龙山县| 明星| 霍林郭勒市| 九江市| 资溪县| 贵溪市| 东阳市| 逊克县| 蒲城县| 营山县| 宜黄县| 措美县| 海门市| 彭山县| 杭锦后旗| 南岸区| 凤城市| 易门县| 偏关县| 济宁市| 孙吴县| 建瓯市| 柳州市| 大田县| 潜江市| 宜宾县| 临邑县| 海丰县| 宁津县| 安吉县| 保德县| 噶尔县| 宝丰县| 定州市| 九寨沟县| 天等县| 兴国县| 太保市| 宝兴县|