源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

详解在Vue中通过自定义指令获取dom元素

  • 时间:2022-12-16 02:10 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:详解在Vue中通过自定义指令获取dom元素
vue.js 是数据绑定的框架,大部分情况下我们都不需要直接操作 DOM Element,但在某些时候,我们还是有获取DOM Element的需求的;  在 vue.js 中,获取某个DOM Element常用的方法是将这个元素改成一个组件 (component),然后通过 [code]this.$el[/code] 去获取,但是在一些很小的项目里,在一些没有使用 webpack 等构建工具的项目中,创建一个组件并不是那么值得,所以 vue 提供了另一种操作DOM元素的方式,就是自定义指令 (directive) ;  自定义指令功能在DOM Element的生命周期内提供了不同的钩子函数,并允许我们监听指令绑定的数据的变化,但是它也是有缺点的,就是在指令的钩子函数内无法通过[code] this [/code]来访问当前 vue 实例,也就无法进一步进行复杂的操作(虽然一般不需要什么复杂的操作),在 vue 的钩子函数 (lifecycle hook) 和方法 (method) 中也无法像[code] this.$el [/code]那样轻易的访问到自定义指令绑定的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
  }
}) 
如代码所示,建立一个名为[code] run [/code]的自定义指令,运行绑定的方法,并将当前 DOM Element 作为参数传入;  同时建立一个名为[code] register [/code]的方法,接收一个 flag 参数,并根据这个参数返回一个用于将传入参数注册到[code] this.elements [/code]对象中的闭包函数; 将写好的 run 指令和 register 方法搭配使用,就可以把想要的 DOM 注册进this.elements,并在 hook 或者 method 中十分方便的访问;  注意:自定义指令将会在DOM元素插入 Document 时,也就是组件 mount 时首次执行,所以在此之前,比如[code] beforeMount [/code]钩子中是无法使用的,这点也和[code] this.$el[/code] 一致,详情可以查看官方文档中的[url=http://%20http://cn.vuejs.org/v2/guide/instance.html#search-query-sidebar]生命周期图示[/url]; 其实也很好理解啦……在 mount 之前,根本就没有这个实际的 DOM 元素,怎么可能访问的到……(:з)∠) 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程素材网。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部