在vue.js渲染完界面之后如何再調用函數(shù)
vue.js渲染完界面后調用函數(shù)
在使用vue.js框架的時候,有時候會希望在頁面渲染完成之后,再執(zhí)行函數(shù)方法來處理初始化相關的操作,如果只處理頁面位置、寬或者高時,必須要在頁面完全渲染之后才可以,頁面沒有加載完成之前,獲取到的寬高不準確。
使用過jquery的都知道,有個ready方法可以使用,但vue.js則需要結合watch和nextTick方法來使用。
1.下面開始介紹下
在頁面加載一個數(shù)據列表完成之后,頁面自動滾動定位到中間某個列表元素,需要在列表數(shù)據渲染完成,計算列表高度,再控制定位到指定行。
首先介紹下一開始嘗試沒有生效的方案,這也是大家最容易出現(xiàn)錯誤的地方,vue.js提供的mounted函數(shù),表示掛載到實例上去之后調用該鉤子。
2.運行之后
發(fā)現(xiàn)mounted執(zhí)行的時候,獲取到的height值不對,打個斷點也可以發(fā)現(xiàn),此時頁面沒有渲染完成,列表塊還是一片空白
3.此時查詢官方api文檔發(fā)現(xiàn)
有一個nextTick方法,意思是在下次 DOM 更新循環(huán)結束之后執(zhí)行延遲回調。
在修改數(shù)據之后立即使用這個方法,獲取更新后的 DOM。
使用之后發(fā)現(xiàn),還是不能解決我所需要的效果
4.繼續(xù)查詢api文檔發(fā)現(xiàn)
watch方法,用于觀察Vue實例上的數(shù)據變動。
對應一個對象,鍵是觀察表達式,值是對應回調,再次嘗試,運行后發(fā)現(xiàn)還是不行
5.最終把watch和nextTick組合一起
watch:{ ? ? showList:function(){ ? ? ? ? this.goPrice(0); ? ? }}
showList對應表格頁面的綁定變量
<tr v-for="(item,index) in showList">
6.運行后發(fā)現(xiàn)
已經達到了預期的效果
最后說明下,有時候我們會想到使用setTimeout的方式來實現(xiàn),使用這種方式需要設置個超時執(zhí)行時間,由于渲染時間無法確定,有快有慢,就會出現(xiàn)不穩(wěn)定的現(xiàn)象。
vue渲染完成事件
vue里面本身帶有兩個回調函數(shù)
- 一個是`Vue.nextTick(callback)`,當數(shù)據發(fā)生變化,更新后執(zhí)行回調。
- 另一個是`Vue.$nextTick(callback)`,當dom發(fā)生變化,更新后執(zhí)行的回調。
栗子:
... <ul id="demo"> ? ? <li v-for="item in list">{{item}}</div> </ul> ...
new Vue({ ? ? el:'#demo', ? ? data:{ ? ? ? ? list=[0,1,2,3,4,5,6,7,8,9,10] ? ? }, ? ? methods:{ ? ? ? ? push:function(){ ? ? ? ? ? ? this.list.push(11); ? ? ? ? ? ? this.nextTick(function(){ ? ? ? ? ? ? ? ? alert('數(shù)據已經更新') ? ? ? ? ? ? }); ? ? ? ? ? ? this.$nextTick(function(){ ? ? ? ? ? ? ? ? alert('v-for渲染已經完成') ? ? ? ? ? ? }) ? ? ? ? } ? ? } })
以上為個人經驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼
這篇文章主要介紹了vue中beforeRouteLeave實現(xiàn)頁面回退不刷新的示例代碼,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧2019-11-11Vue2.0實現(xiàn)調用攝像頭進行拍照功能 exif.js實現(xiàn)圖片上傳功能
這篇文章主要為大家詳細介紹了Vue2.0實現(xiàn)調用攝像頭進行拍照功能,以及圖片上傳功能引用exif.js,具有一定的參考價值,感興趣的小伙伴們可以參考一下2018-04-04