91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

在Vue中使用directive時需要注意哪些事項

發布時間:2021-03-26 16:27:15 來源:億速云 閱讀:170 作者:Leah 欄目:web開發

這期內容當中小編將會給大家帶來有關在Vue中使用directive時需要注意哪些事項,文章內容豐富且以專業的角度為大家分析和敘述,閱讀完這篇文章希望大家可以有所收獲。

指令鉤子函數會被傳入以下參數:

  1. el:指令所綁定的元素,可以用來直接操作 DOM 。

  2. binding:一個對象,包含以下屬性:vnode:Vue 編譯生成的虛擬節點。移步 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:傳給指令的參數,可選。例如 v-my-directive:foo 中,參數為 "foo"。

    6. ?modifiers:一個包含修飾符的對象。例如:v-my-directive.foo.bar 中,修飾符對象為 { foo: true, bar: true }。

  3. oldVnode:上一個虛擬節點,僅在 update 和 componentUpdated 鉤子中可用。

具體事例

clickoutside.js

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

v-clickoutside具體是怎么實現的

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

export default {
 /*
  @param el 指令所綁定的元素
  @param binding {Object} 
  @param vnode vue編譯生成的虛擬節點
  */
 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要在實例初始化之前,不然會報錯,還有,定義的指令不支持駝峰式寫法,也會報下面同樣的錯,雖然在源碼中沒有找到在哪里統一處理大小寫,但是在有關directive的方法中捕捉到的指令命名統一變為小寫,所以,還是用'-'或者'_'分割吧。

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鉤子函數中的參數的參數,還有一種,為

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

參數代表的含義,參見鉤子函數描述

最后,要使用自定義的指令,只需在對用的元素中,加上'v-'的前綴形成類似于內部指令'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的鉤子函數各個周期。下面是固定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中使用directive時需要注意哪些事項了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

沾益县| 耒阳市| 隆子县| 乌兰察布市| 当阳市| 鄯善县| 麟游县| 娱乐| 西贡区| 大同县| 文水县| 庆元县| 五莲县| 始兴县| 贵港市| 海阳市| 九江市| 宝应县| 邢台市| 科技| 双柏县| 玛多县| 龙州县| 同江市| 丽江市| 安溪县| 金华市| 汕尾市| 安多县| 湖北省| 玛沁县| 龙海市| 大竹县| 恭城| 谷城县| 镇康县| 和平区| 张掖市| 伊春市| 买车| 大丰市|