vue頁面渲染結束事件


在使用vue.js框架的時候,有時候會希望在頁面渲染完成之后,再執行函數方法來處理初始化相關的操作,如果只處理頁面位置、寬或者高時,必須要在頁面完全渲染之后才可以,頁面沒有加載完成之前,獲取到的寬高不准確。使用過jquery的都知道,有個ready方法可以使用,但vue.js則需要結合watch和nextTick方法來使用。

1.下面開始介紹下,在頁面加載一個數據列表完成之后,頁面自動滾動定位到中間某個列表元素,需要在列表數據渲染完成,計算列表高度,再控制定位到指定行。首先介紹下一開始嘗試沒有生效的方案,這也是大家最容易出現錯誤的地方,vue.js提供的mounted函數,表示掛載到實例上去之后調用該鈎子。

2.運行之后,發現mounted執行的時候,獲取到的height值不對,打個斷點也可以發現,此時頁面沒有渲染完成,列表塊還是一片空白

 

 

 

 

3.此時查詢官方api文檔發現,有一個nextTick方法,意思是在下次 DOM 更新循環結束之后執行延遲回調。在修改數據之后立即使用這個方法,獲取更新后的 DOM。使用之后發現,還是不能解決我所需要的效果

 

 

 

 

4.繼續查詢api文檔發現,watch方法,用於觀察Vue實例上的數據變動。對應一個對象,鍵是觀察表達式,值是對應回調,再次嘗試,運行后發現還是不行

 

 

 

 

5.最終把watch和nextTick組合一起,watch:{ showList:function(){ this.goPrice(0); }}

showList對應表格頁面的綁定變量 <tr v-for="(item,index) in showList">

 

 

 

 

6.運行后發現,已經達到了預期的效果

 

注意:這里 watch 要和 methods 方法平級展示

watch:{
        htcfOrder:function(){
            //頁面渲染完成后的操作
            this.$nextTick(function(){
                // 開工前
                if(vm.htcfOrder !=null && vm.htcfOrder.beforeWorkList !=null && vm.htcfOrder.beforeWorkList.length>0){
                    for (let i = 0; i < vm.htcfOrder.beforeWorkList.length; i++) {
                        if (vm.htcfOrder.beforeWorkList[i].urlType == 1){
                            var player2 = videojs(vm.htcfOrder.beforeWorkList[i].extKey+i,{
                                muted: false,controls : true,height:300,width:300,poster:'',src:'',preload:"auto"
                            },function(){
                            });
                            player2.reset();
                            player2.src(vm.htcfOrder.beforeWorkList[i].extValue);
                            player2.load();
                        }
                    }
                }
            })
        }
    },
methods:{}
 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM