欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Vue.directive使用注意(小結)

 更新時間:2018年08月31日 09:47:49   作者:遠遠的飛夢  
這篇文章主要介紹了Vue.directive使用注意(小結),小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

指令鉤子函數(shù)會被傳入以下參數(shù):

  1. el:指令所綁定的元素,可以用來直接操作 DOM 。
  2. binding:一個對象,包含以下屬性:vnode:Vue 編譯生成的虛擬節(jié)點。移步 VNode API 來了解更多詳情。
    1. ◦name:指令名,不包括 v- 前綴。
    2. ◦value:指令的綁定值,例如:v-my-directive="1 + 1" 中,綁定值為 2。
    3. ◦oldValue:指令綁定的前一個值,僅在 update 和 componentUpdated 鉤子中可用。無論值是否改變都可用。
    4. ◦expression:字符串形式的指令表達式。例如 v-my-directive="1 + 1" 中,表達式為 "1 + 1"。
    5. ◦arg:傳給指令的參數(shù),可選。例如 v-my-directive:foo 中,參數(shù)為 "foo"。
    6. ◦modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。
  3. oldVnode:上一個虛擬節(jié)點,僅在 update 和 componentUpdated 鉤子中可用。

具體事例

clickoutside.js

用途:clickoutside.js主要用于解決點解元素外的地方時執(zhí)行函數(shù)  主要應用的常見有彈出層點擊遮罩層是隱藏窗口,或者一些彈出層點擊其他地方要消失的場景

v-clickoutside具體是怎么實現(xiàn)的

答:主要是通過在bind中定義函數(shù) 通過判斷是否包含元素,執(zhí)行binding.value函數(shù)

export default {
 /*
  @param el 指令所綁定的元素
  @param binding {Object} 
  @param vnode vue編譯生成的虛擬節(jié)點
  */
 bind (el, binding, vnode) {
  const documentHandler = function(e) {  
   if(!vnode.context || el.contains(e.target)) {
    return false;
   }
   if (binding.expression) {
    binding.value(e)
   }
  }
 
   document.addEventListener('click', documentHandler)
 },
 update (el, binding) {
 
 },
 unbind(el) {
  document.removeEventListener('click', documentHandler);
 }
}

Vue.directive使用注意

首先,Vue.directive要在實例初始化之前,不然會報錯,還有,定義的指令不支持駝峰式寫法,也會報下面同樣的錯,雖然在源碼中沒有找到在哪里統(tǒng)一處理大小寫,但是在有關directive的方法中捕捉到的指令命名統(tǒng)一變?yōu)樾?所以,還是用'-'或者'_'分割吧。

vue.js:491 [Vue warn]: Failed to resolve directive: xxx

然后,其定義方式有兩種,一種是Vue.directive('xxx', function(el, bind, vNode){}),其中el為dom,vNode為vue的虛擬dom,bind為一較復雜對象,詳情可見Vue-directive鉤子函數(shù)中的參數(shù)的參數(shù),還有一種,為

Vue.directive('my-directive', {
 bind: function () {},
 inserted: function () {},
 update: function () {},
 componentUpdated: function () {},
 unbind: function () {}
})

參數(shù)代表的含義,參見鉤子函數(shù)描述

最后,要使用自定義的指令,只需在對用的元素中,加上'v-'的前綴形成類似于內(nèi)部指令'v-if','v-text'的形式。

// Vue.directive
      Vue.directive('test_directive', function(el, bind, vNode){
        el.style.color = bind.value;
      });
      var app = new Vue({
        el: '#app',
        data: {
          num: 10,
          color: 'red'
        },
        methods: {
          add: function(){
            this.num++;
          }
        }
      });

當然,也可以將method中的方法加入,bind.value即為methods中的方法。

<div id="app">
      <div v-test_directive="changeColor">{{num}}</div>
      <button @click="add">增加</button>
    </div>

    <script type="text/javascript">
      // Vue.directive
      Vue.directive('test_directive', function(el, bind, vNode){
        el.style.color = bind.value();
      });
      var app = new Vue({
        el: '#app',
        data: {
          num: 10,
          color: 'red'
        },
        methods: {
          add: function(){
            this.num++;
          },
          changeColor: function(){
            return this.color;
          }
        }
      });

這種形式,可以模仿'v-once',并進行一定的復雜邏輯,但是想要完全達到'v-once',可能需要考慮Vue-directive的鉤子函數(shù)各個周期。下面是固定num的值,使得add的方法無效。

<div id="app">
      <div v-test_directive="changeColor">{{num}}</div>
      <button @click="add">增加</button>
    </div>

    <script type="text/javascript">
      // Vue.directive
      Vue.directive('test_directive', function(el, bind, vNode){
        el.style.color = bind.value();
      });
      var app = new Vue({
        el: '#app',
        data: {
          num: 10,
          color: 'red'
        },
        methods: {
          add: function(){
            this.num++;
          },
          changeColor: function(){
            this.num = 20;

            return this.color;
          }
        }
      });

因為小生剛剛接觸vue,所以,希望前輩能多加指點。也希望大家多多支持腳本之家。

相關文章

  • 解決vue單頁使用keep-alive頁面返回不刷新的問題

    解決vue單頁使用keep-alive頁面返回不刷新的問題

    下面小編就為大家分享一篇解決vue單頁使用keep-alive頁面返回不刷新的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-03-03
  • vue里面v-bind和Props 利用props綁定動態(tài)數(shù)據(jù)的方法

    vue里面v-bind和Props 利用props綁定動態(tài)數(shù)據(jù)的方法

    今天小編就為大家分享一篇vue里面v-bind和Props 利用props綁定動態(tài)數(shù)據(jù)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-08-08
  • 基于Vue3和element-plus實現(xiàn)登錄功能(最終完整版)

    基于Vue3和element-plus實現(xiàn)登錄功能(最終完整版)

    這篇文章主要介紹了基于Vue3和element-plus實現(xiàn)一個完整的登錄功能,本文結合示例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-03-03
  • Vue.use源碼分析

    Vue.use源碼分析

    這篇文章主要為大家詳細介紹了Vue.use源碼,Vue.use方法的引入,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2017-04-04
  • vue+antd實現(xiàn)折疊與展開組件

    vue+antd實現(xiàn)折疊與展開組件

    這篇文章主要為大家詳細介紹了vue+antd實現(xiàn)折疊與展開組件,文中示例代碼介紹的非常詳細,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2022-09-09
  • Vue使用openlayers加載天地圖

    Vue使用openlayers加載天地圖

    這篇文章主要為大家詳細介紹了Vue如何使用openlayers加載天地圖,文中的示例代碼講解詳細,具有一定的借鑒價值,感興趣的小伙伴可以了解下
    2024-02-02
  • Vue+Element ui 根據(jù)后臺返回數(shù)據(jù)設置動態(tài)表頭操作

    Vue+Element ui 根據(jù)后臺返回數(shù)據(jù)設置動態(tài)表頭操作

    這篇文章主要介紹了Vue+Element ui 根據(jù)后臺返回數(shù)據(jù)設置動態(tài)表頭操作,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-09-09
  • vue封裝Animate.css動畫庫的使用方式

    vue封裝Animate.css動畫庫的使用方式

    這篇文章主要介紹了vue封裝Animate.css動畫庫的使用方式,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-04-04
  • Vue?報錯-4058?ENOENT:no?such?file?or?directory的原因及解決方法

    Vue?報錯-4058?ENOENT:no?such?file?or?directory的原因及解決方法

    Vue?報錯-4058?ENOENT:?no?such?file?or?directory的原因和解決辦法,關于為什么為會報這個錯誤,按照字面意思的理解就是沒有找到這個文件或這個路徑,說明是路徑不對,本文給大家分享解決方案,感興趣的朋友一起看看吧
    2023-10-10
  • Vue正則表達式限制input的輸入范圍

    Vue正則表達式限制input的輸入范圍

    我們有時需要限制文本框輸入內(nèi)容的類型,本節(jié)分享下正則表達式限制文本框只能輸入數(shù)字、小數(shù)點、英文字母、漢字等代碼,感興趣的朋友跟隨小編一起看看吧
    2023-12-12

最新評論