1. 程式人生 > >VUE DOM載入後執行自定義事件

VUE DOM載入後執行自定義事件

最近想用vue做一個小東西,誰知道一開始就遇到了一個棘手的問題:

首先我想在頁面載入前通過ajax請求頁面展示所需要的資訊,於是我在created鉤子函式裡面請求了我想要的資料

created:function(){
                 var url="/indexitem";
                 var _self=this;
                 $.get(url,function(data){
                     _self.items=data;
                 });
                 $.get('/banner',function(data){
                     _self.banners=data;
                 });
             }

這一步很順利,接下來就是要將資料繫結到對應的元素中,我在這裡需要將請求得到的圖片地址繫結到輪播圖對應的元素中,

我這裡採用的是mui框架中提供的圖片輪播(移動端,支援手勢滑動),問題恰恰就這裡:

<div id="slider"  class="mui-slider" @click="greet()">
                <div class="mui-slider-group mui-slider-loop">
                    <div class="mui-slider-item mui-slider-item-duplicate"><a href="#" :style="{backgroundImage: 'url(' + banners[banners.length-1].src+ ')',backgroundSize:'cover'}"></a></div>
                    <div class="mui-slider-item"  v-for="cc in banners"><a href="#" :style="{backgroundImage: 'url(' + cc.src+ ')',backgroundSize:'cover'}"></a></div>
                    <div class="mui-slider-item mui-slider-item-duplicate"><a href="#" :style="{backgroundImage:'url('+banners[0].src+')',backgroundSize:'cover'}"></a></div>
                </div>
                <div class="mui-slider-indicator">
                    <div class="mui-indicator mui-active"></div>
                    <div class="mui-indicator"></div>
                    <div class="mui-indicator"></div>
                    <div class="mui-indicator"></div>
                </div>
            </div>

我繫結完資料之後,發現輪播圖失效了,因為我之前用原生js寫的時候遇到過同樣的問題,我當時的解決辦法是等頁面載入完成後重新進行滑動初始化,但是今天用vue我蒙了,試了很多生命週期函式也無法確保在頁面載入完成後進行初始化。

vue.js更多的希望是通過資料繫結來代替直接通過dom操作,而vue並沒有提供渲染完成的鉤子。

所以我今天的解決辦法是:setTimeout()

在例項化VUE物件後新增下面程式碼:

 setTimeout(function(){
             console.log($('#slider').length);
             var gallery = mui('.mui-slider');
             gallery.slider({
                 interval: 3000//自動輪播週期,若為0則不自動播放,預設為0;
             });
         },1000);