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

溫馨提示×

溫馨提示×

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

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

詳解在Vue中通過自定義指令獲取dom元素

發布時間:2020-10-23 01:42:06 來源:腳本之家 閱讀:290 作者:不帶汽的可樂 欄目:web開發

vue.js 是數據綁定的框架,大部分情況下我們都不需要直接操作 DOM Element,但在某些時候,我們還是有獲取DOM Element的需求的;

 在 vue.js 中,獲取某個DOM Element常用的方法是將這個元素改成一個組件 (component),然后通過 this.$el 去獲取,但是在一些很小的項目里,在一些沒有使用 webpack 等構建工具的項目中,創建一個組件并不是那么值得,所以 vue 提供了另一種操作DOM元素的方式,就是自定義指令 (directive) ;

 自定義指令功能在DOM Element的生命周期內提供了不同的鉤子函數,并允許我們監聽指令綁定的數據的變化,但是它也是有缺點的,就是在指令的鉤子函數內無法通過 this 來訪問當前 vue 實例,也就無法進一步進行復雜的操作(雖然一般不需要什么復雜的操作),在 vue 的鉤子函數 (lifecycle hook) 和方法 (method) 中也無法像 this.$el 那樣輕易的訪問到自定義指令綁定的DOM元素;

 不過只要通過一點點變通的做法,就可以突破這個限制:

HTML代碼: 

    <div id="app">
      <span class='test' v-run="register('test1')"></span>
      <p class='test' v-run="register('test2')"></p>
    </div> 

JavaScript代碼:

const vm = new Vue({
  el:'#app',
  data : {
    elements : {}
  },
  directives : {
    run (el, binding) {
      if (typeof binding.value == 'function')
        binding.value(el);
    }
  },
  methods : {
    register (flag) {
      return (el)=>{
        this.elements[flag] = el;
      }
    }
  },
  beforeMount () {
    console.log(this.elements.test1); //=> undefined
  },
  mounted () {
    console.log(this.elements.test1); //=> the span DOM Element
    console.log(this.elements.test2); //=> the p DOM Element
  }
}) 

如代碼所示,建立一個名為 run 的自定義指令,運行綁定的方法,并將當前 DOM Element 作為參數傳入;
 同時建立一個名為 register 的方法,接收一個 flag 參數,并根據這個參數返回一個用于將傳入參數注冊到 this.elements 對象中的閉包函數;

將寫好的 run 指令和 register 方法搭配使用,就可以把想要的 DOM 注冊進this.elements,并在 hook 或者 method 中十分方便的訪問;

 注意:自定義指令將會在DOM元素插入 Document 時,也就是組件 mount 時首次執行,所以在此之前,比如 beforeMount 鉤子中是無法使用的,這點也和 this.$el 一致,詳情可以查看官方文檔中的生命周期圖示;

其實也很好理解啦……在 mount 之前,根本就沒有這個實際的 DOM 元素,怎么可能訪問的到……(:з)∠)

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

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

AI

西充县| 砀山县| 邢台县| 洛川县| 泸定县| 景谷| 岑巩县| 清河县| 本溪市| 进贤县| 吉木乃县| 宝鸡市| 兴化市| 靖西县| 丹东市| 正阳县| 从江县| 玉门市| 福州市| 宜城市| 江安县| 中江县| 琼结县| 合作市| 竹北市| 临汾市| 新乐市| 乳源| 华池县| 江门市| 金华市| 汕尾市| 沈阳市| 北京市| 鄂伦春自治旗| 卓尼县| 壤塘县| 常德市| 霍山县| 简阳市| 门源|