在Vue中通过自定义指令获取元素
来源:互联网 发布:淘宝能买汽车吗 编辑:程序博客网 时间:2024/04/27 14:52
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 元素,怎么可能访问的到……(:з)∠)
- 在Vue中通过自定义指令获取元素
- 在Vue中通过自定义指令获取元素
- 在Vue中通过自定义指令获取元素
- 在Vue中通过自定义指令获取元素
- 在Vue中通过自定义指令获取元素
- 转载:在Vue中通过自定义指令获取元素
- 在Vue中通过自定义指令获取元素
- 在vue中获取dom元素
- 在vue中获取dom元素
- vue中怎么获取元素
- Vue.js学习笔记:在元素 和 template 中使用 v-if 指令
- vue---vue中常用指令,以及如何自定义指令vue.directive进行节点操作?
- 一例解析通过$.ajax()获取后台服务器数据并通过vue渲染在页面中
- vue自定义指令-vue-reclick
- vue 自定义指令
- Vue自定义指令-拖拽
- Vue.js--自定义指令
- Vue自定义指令
- 数据流图 系统流程图 程序流程图 程序的系统结构图之间的区别和联系
- 关于如何建立服务老人的评估系统与医疗产品开发的想法
- SEO优化过程的一些常犯误区
- 十进制转为十六进制
- Apache 压力测试工具Jmeter基础用法
- 在Vue中通过自定义指令获取元素
- Java学习篇之java的基本语法
- [51NOD]1283 最小周长[数学]
- UI设计学习路线图
- 这是一个简单的小东西——用html做Diy书签
- 402. Remove K Digits
- SEO唯有勤奋优化,新手必读!
- Python操作HBase
- Activity生命周期