<div id="box"> <!-- 自定義指令 --> <p v-hello>v-hello全局自定義指令</p> </div>
/* 自定義全局指令,返回這個元素對象 */ Vue.directive('hello',{ inserted:function(el){ console.log(el); }, });
<div id="box">
<!-- 自定義指令的生命週期 --> <p v-hello2="color">v-hello2局補自定義指令</p>
</div>
var vm = new Vue({ el:'#box', data:{ color:'red', },//局部指令 directives:{ hello2:{ //binding表示元素屬性hello中的值,這個指向vm.data中的color,可是在控制檯的後臺若是修改color的值,並不能讓v-hello自定義指令得到信息,這裏就是自定義指令的生命週期問題,inserted只在第一次渲染的時候,這裏加入update就能夠實現實時變動,inserted和update是最經常使用的。 inserted:function(el,binding){ console.log(binding.value); el.style.background = binding.value; }, update:function(el,binding){ el.style.background = binding.value; } }, } })
<div od="box">
<!-- 自定義指令的函數簡寫方式 --> <p v-hello3="obj">v-hello3全局自定義指令簡寫指令函數</p>
</div>
//自定義指令的函數簡寫方式,若是指令須要多個值,能夠傳入javascript對象字面量,好比能夠傳入一個obj對象來傳輸多個值 Vue.directive('hello3',function(el,binding){ console.log(binding) el.style.background = binding.value.background; el.style.fontSize = binding.value.fontSize; } ); var vm = new Vue({ el:'#box', data:{ obj:{ 'background':'yellow', 'fontSize':'24px' }, }, })
*{margin: 0;padding: 0;} html,body{height: 100%;} /* 改變最外層容器的寬高 */ .swiper-container{width: 600px;height: 600px;background: #555;} .swiper-slide{font-size: 30px;text-align: center;background: #111;color: white;}
<div id="box"> <div class="swiper-container"> <div class="swiper-wrapper"> <!-- 由於指令是在DOM渲染完以後執行的,若是不加入指令,初始化swiper是沒辦法實如今DOM渲染完成前就實現功能的,但還須要再添加一個觸發器,由於指令所指的DOM雖然建立完了,但尚未添加到父節點中, --> <div class="swiper-slide" v-for="(data,index) in datalist" v-swipe="index"> {{data}} </div> </div> <!-- 這裏是分頁器 --> <div class="swiper-pagination"></div> </div> </div>
//指令輪播封裝,vnode表示獲取的是一個虛擬DOM v Vue.directive('swipe',function(el,binding,vnode){ console.log(binding.value); if(binding.value == vnode.context.datalist.length - 1){ console.log('最後一個DOM建立完畢'); setTimeout(()=>{ var swiper = new Swiper('.swiper-container', { //分頁 pagination: { el: '.swiper-pagination', }, //自動輪播 autoplay: { delay: 2500,//時間 毫秒 disableOnInteraction: false,//用戶操做以後是否中止自動輪播默認true }, loop:true,//循環 最後面一個日後面滑動會滑到第一個 }); },0) } }); var vm = new Vue({ el:'#box', data:{ datalist:[], }, //指令輪播,mounted什麼時候調用呢,組件渲染到DOM節點上,掛載到DOM節點上,這個生命週期會調用,這個是用來模擬僞裝請求數據,這個請求是一個異步請求,這裏作一個延時。 mounted(){ setTimeout(()=>{ this.datalist = ['111','222','333']; },2000); }, })