VUE DOM載入後執行自定義事件
阿新 • • 發佈:2019-01-03
最近想用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);