在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ vue.js 如何在頁面渲染完后去操作dom,而且只執(zhí)行一次?

vue.js 如何在頁面渲染完后去操作dom,而且只執(zhí)行一次?

我想在頁面渲染完執(zhí)行我的代碼,去操作dom。因?yàn)槲野巡僮鱠om的寫在加載數(shù)據(jù)的方法里面,發(fā)現(xiàn)是選不到dom的,應(yīng)該是這個(gè)時(shí)候js還沒執(zhí)行完,頁面還沒渲染好。

vue的created是實(shí)例創(chuàng)建完執(zhí)行一次,但是這個(gè)時(shí)候去操作dom是選不到的。
還有個(gè)update,這個(gè)倒是可以選到dom,但是這個(gè)每次都被執(zhí)行啊,我只想在執(zhí)行一次。

對(duì)于這種需求,有沒有什么好的解決方法?

回答
編輯回答
風(fēng)畔

DOM選在加載完畢是在mounted這個(gè)生命周期,在這里面是可以執(zhí)行一些事件的;
在Vue中要想就執(zhí)行一次點(diǎn)擊事件,可以使用事件修飾符.once,非常好用。例如:<p v-on:click.once="doThis">只執(zhí)行一次</p>,當(dāng)然綁定事件可以簡寫成@符號(hào)的。 激凸可參考官方文檔: https://vuefe.cn/v2/guide/eve...

2017年10月29日 11:28
編輯回答
故人嘆

你要在獲取數(shù)據(jù)之后用this.$nextTick(()=>{ //todo }) 這樣就能拿到dom元素了。
圖片描述

2018年9月16日 19:06
編輯回答
溫衫

使用directive自定義指令

2017年9月14日 08:44
編輯回答
青瓷

在你請(qǐng)求數(shù)據(jù)接口之后,給數(shù)據(jù)賦值完成,在后面寫

this.$nextTick(function(){

})

同時(shí)注意下this指向

2017年2月9日 11:41
編輯回答
骨殘心

在接口請(qǐng)求成功的回調(diào)里使用

this.$nextTick(() =>{
  // 在這里面去獲取DOM
})。

在mounted生命周期,組件掛載成功,但還未渲染,自然獲取不到相關(guān)的DOM節(jié)點(diǎn)??茨阗Y料好像不是前端,舉個(gè)更簡單的例子,你在html中,把 console.log(document.querySelector('body'))寫在body標(biāo)簽前面,代碼執(zhí)行時(shí)機(jī)先于頁面渲染,結(jié)果就是undefined。
不推薦用updated, beforeUpdate生命周期,這2個(gè)生命周期只會(huì)在數(shù)據(jù)發(fā)生變化時(shí)才觸發(fā)。如果你請(qǐng)求接口的數(shù)據(jù)是放在created生命周期(我推薦放在created里面去發(fā)起請(qǐng)求),初次進(jìn)入頁面是不會(huì)觸發(fā)updated, beforeUpdate里面的代碼。
如果你非要要updated,并且希望第一次進(jìn)入頁面即可獲取到DOM節(jié)點(diǎn),那么請(qǐng)?jiān)趍ounted生命周期請(qǐng)求接口數(shù)據(jù),而不是created了

2017年6月26日 16:21
編輯回答
過客

實(shí)在不行的話,可以在mounted() {} 里面初始化,然后 調(diào)用this.xxxx,也可以使用jquery操作dom,我的vue項(xiàng)目用vue解決不了,就用jquery來解決。

2017年9月3日 09:51
編輯回答
空痕

我記得vue不支持直接操作dom。你可以試著給dom節(jié)點(diǎn)加個(gè)ref,等到mounted之后就行js事件

2017年9月9日 16:43
編輯回答
墨染殤

看下vue的生命周期,直接用mounted就好了

2018年8月23日 18:20
編輯回答
笑忘初

結(jié)合大家的回答,我又去看了下文檔,this.$nextTick是可以的,但是一定要放在數(shù)據(jù)加載完后。要能選到dom,并且獨(dú)立于方法之外,還是用updated,beforeUpdate。文檔上也是這么說的。
如果用mounted,我的dom選不到,從文檔上的意思是實(shí)例創(chuàng)建完調(diào)用它,但是選不到dom,不知道是不是我代碼的問題。

2017年12月2日 18:16
編輯回答
六扇門
mounted: function () {
  this.$nextTick(function () {

  })
}
2017年4月28日 04:39