当前位置:首页 > 日记 > 正文

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

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

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 元素,怎么可能访问的到……(:з)∠)

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。

相关文章

ps怎么设计一款巧克力奶油文字效果

ps怎么设计一款巧克力奶油文字效果

奶油,文字效果,电脑软件,ps,简单但效果超棒的PS教程。软件名称:Adobe Photoshop 8.0 中文完整绿色破解版软件大小:150.1MB更新时间:2015-11-041、下面是效果图。2、新建立一个图层大小随自己喜好没有过多要求,建立背景添加紫红色的径向渐变。3…

整理关于Bootstrap导航的慕课笔记

整理关于Bootstrap导航的慕课笔记

导航,笔记,电脑软件,Bootstrap,整理自慕课笔记基础样式导航对于一位前端人员来说并不陌生。可以说导航是一个网站重要的元素组件之一,可以便于用户查找网站所提供的各项功能服务。导航的制作方法也是千奇百怪,五花八门。在这一节中将向大家介…

微信小程序商城项目之购物数量加减

微信小程序商城项目之购物数量加减

数量,商城项目,加减,程序,电脑软件,我们在购买宝贝的时候,购物的数量,经常是我们需要使用的,如下所示:在宝贝详情页里:在购物车里:现在就为大家介绍这个小组件,在小程序中,该如何去写下图为本项目的图:wxml:<!-- 主容器 --> <view class="stepper">…

手机wps怎么制作表格图文教程

手机wps怎么制作表格图文教程

步骤,图文教程,绘制,方法,表格,  我们有时需要在wps中绘制表格,而身边没有电脑,怎么办?这时我们可以使用手机版本的wps绘制表格,下面就让小编告诉你如何使用手机wps绘制表格的方法,希望能帮到大家。手机wps绘制表格的方法步骤手机wps绘制表格…

JS判断非空至少输入两个字符的简单

JS判断非空至少输入两个字符的简单

简单实现,输入,字符,方法,两个,dialog是我项目方法,你应该替换成alert(),或者你自己的var str = $("#stuName").val(); if (str.length < 2) { dialog("提示", "text:请输入至少两位字符", 300, "auto", ""); return…

详解Spring mvc ant path的使用方

详解Spring mvc ant path的使用方

使用方法,详解,电脑软件,Spring,ant,详解Spring mvc ant path的使用方法概要:任何一个WEB都需要解决URL与请求处理器之间的映射,spring MVC也是一样,但Spring MVC就像Spring所作的一切一样(灵活,可以配置各种东西,但是也造成了很多复杂性),肯定不…

ES6扩展运算符用法实例分析

ES6扩展运算符用法实例分析

扩展,实例分析,运算符,电脑软件,本文实例讲述了ES6扩展运算符用法。分享给大家供大家参考,具体如下:扩展运算符用三个点号表示,功能是把数组或类数组对象展开成一系列用逗号隔开的值,扩展运算符有以下几点作用一、展开数组//展开数组let a = [1…

Photoshop合成极具吸引力的蜗牛背

Photoshop合成极具吸引力的蜗牛背

极具,蜗牛,吸引力,商海,电脑软件,关于模仿,个人的观点是:人类任何的进步都是从模仿开始。其实任何大师在自己的风格还没有出现之前,都有一段漫长的模仿阶段。所以不要太在意前期的模仿,当然,不要生抄,要学习方法。只要在模仿中学到了方法,未来震撼…

js+css3实现旋转效果

js+css3实现旋转效果

效果,电脑软件,js,我的前面一张文章实现了用css3制作旋转的效果,现在呢,我换另外一种方法来实现.就是使用js结合css3的方法来实现的.下面我就先上图给大家看看效果吧下面呢我先放上我的css代码,代码很简单:.one{width:200px;height: 200px;…

webpack3之loader全解析

webpack3之loader全解析

电脑软件,loader,首先亮出webpack官方网站,webpack能干什么?官网给出的答案就是,一句话,让一切变得简单!各式各样的loader层出不穷,让我们在构建时不知所措,于此,总结下loader的全解析。概念loader,顾名思义,加载器,英文的解释如下:Loaders are transfo…

QQ空间打不开的解决方法有哪些

QQ空间打不开的解决方法有哪些

解决方法,空间,打不开,有哪些,电脑软件,  QQ空间是腾讯公司出品的个性空间,用户群很广,很多网友在使用时会遇到QQ空间打不开的问题,qq空间进不去是什么原因?怎么解决?下面小编就为大家介绍一下QQ空间打不开的解决方法,一起来看看吧!QQ空间…

Excel表格中怎么突出凸显查询到的

Excel表格中怎么突出凸显查询到的

查询,数据,表格,电脑软件,行数,  凸显查询到的数据行,用好可以达到防止串行的作用。特别对于Excel数据源非常多,核对的时候容易看错行,看花眼的时候拿出来应对一下。以下是小编为您带来的关于Excel突出凸显查询到的数据行,希望对您有所帮助。…