国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 語言 > JavaScript > 正文

詳解vue指令與$nextTick 操作DOM的不同之處

2024-05-06 15:32:13
字體:
來源:轉載
供稿:網友

異步更新隊列

可能你還沒有注意到,Vue 異步執行 DOM 更新。只要觀察到數據變化,Vue 將開啟一個隊列,并緩沖在同一事件循環中發生的所有數據改變。如果同一個 watcher 被多次觸發,只會被推入到隊列中一次。這種在緩沖時去除重復數據對于避免不必要的計算和 DOM 操作上非常重要。然后,在下一個的事件循環“tick”中,Vue 刷新隊列并執行實際 (已去重的) 工作。Vue 在內部嘗試對異步隊列使用原生的 Promise.then MessageChannel,如果執行環境不支持,會采用 setTimeout(fn, 0) 代替。

例如,當你設置 vm.someData = 'new value' ,該組件不會立即重新渲染。當刷新隊列時,組件會在事件循環隊列清空時的下一個“tick”更新。多數情況我們不需要關心這個過程,但是如果你想在 DOM 狀態更新后做點什么,這就可能會有些棘手。雖然 Vue.js 通常鼓勵開發人員沿著“數據驅動”的方式思考,避免直接接觸 DOM,但是有時我們確實要這么做。為了在數據變化之后等待 Vue 完成更新 DOM ,可以在數據變化之后立即使用 Vue.nextTick(callback) 。這樣回調函數在 DOM 更新完成后就會調用。例如:

<div id="example">{{message}}</div>var vm = new Vue({ el: '#example', data: { message: '123' }})vm.message = 'new message' // 更改數據vm.$el.textContent === 'new message' // falseVue.nextTick(function () { vm.$el.textContent === 'new message' // true})

在組件內使用 vm.$nextTick() 實例方法特別方便,因為它不需要全局 Vue ,并且回調函數中的 this 將自動綁定到當前的 Vue 實例上:

Vue.component('example', { template: '<span>{{ message }}</span>', data: function () { return {  message: '沒有更新' } }, methods: { updateMessage: function () {  this.message = '更新完成'  console.log(this.$el.textContent) // => '沒有更新'  this.$nextTick(function () {  console.log(this.$el.textContent) // => '更新完成'  }) } }})

vue指令

鉤子函數

一個指令定義對象可以提供如下幾個鉤子函數 (均為可選):

bind:只調用一次,指令第一次綁定到元素時調用。在這里可以進行一次性的初始化設置。

inserted:被綁定元素插入父節點時調用 (僅保證父節點存在,但不一定已被插入文檔中)。

update:所在組件的 VNode 更新時調用,但是可能發生在其子 VNode 更新之前。指令的值可能發生了改變,也可能沒有。但是你可以通過比較更新前后的值來忽略不必要的模板更新 (詳細的鉤子函數參數見下)。

componentUpdated:指令所在組件的 VNode 及其子 VNode 全部更新后調用。

unbind:只調用一次,指令與元素解綁時調用。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表

圖片精選

主站蜘蛛池模板: 东乌| 洱源县| 北京市| 光泽县| 馆陶县| 通山县| 长泰县| 津南区| 张家界市| 长兴县| 蒲城县| 陕西省| 明水县| 扶余县| 安阳县| 周口市| 凤凰县| 闻喜县| 遵化市| 图片| 九龙县| 龙海市| 赤壁市| 丰原市| 调兵山市| 汶川县| 汉中市| 呈贡县| 澎湖县| 四川省| 德安县| 资源县| 禄丰县| 丹江口市| 永清县| 兴和县| 蓬安县| 和顺县| 库伦旗| 额尔古纳市| 永胜县|