雖然 Vue.js 鼓勵沿著“數據驅動”的方式思考陪腌,避免直接接觸 DOM,但是有時我們確實要這么做烟瞧。比如一個新聞滾動的列表項偷厦。如果在這里需要操作dom, 應該是等待 Vue 完成更新 DOM之后。
一燕刻、新聞滾動列表
1只泼、在created函數中獲取后臺數據;
2卵洗、模板引擎中用v-for生成列表項请唱;
3、調用滾動函數过蹂,假設該滾動函數式原聲方法寫的十绑;
4、什么時候開始調用滾動函數比較合適呢酷勺?
二本橙、this.$nextTick()
官方解釋:將回調延遲到下次 DOM 更新循環(huán)之后執(zhí)行。在修改數據之后立即使用它脆诉,然后等待 DOM 更新甚亭。它跟全局方法 Vue.nextTick 一樣,不同的是回調的 this 自動綁定到調用它的實例上击胜。
Vue.component('example', {
??template:?'<span>{{ message }}</span>',
??data:?function?() {
????return?{
??????message:?'not updated'
????}
??},
??methods: {
????updateMessage:?function?() {
??????this.message =?'updated'
??????console.log(this.$el.textContent)?// => 'not updated'
??????this.$nextTick(function?() {
????????console.log(this.$el.textContent)?// => 'updated'
??????})
????}
??}
})
三亏狰、新聞滾動列表中的this.$nextTick()放哪里?
因為數據是根據請求之后獲取的偶摔,所以應該放到請求的回調函數里面暇唾。
四、注意this.nextTick()
this.nextTick(callback)辰斋,當數據發(fā)生變化策州,更新后執(zhí)行回調。
this.$nextTick(callback)宫仗,當dom發(fā)生變化够挂,更新后執(zhí)行的回調。