颜爵,光头王老五,mm脱内衣
除了默认设置的核心指令( v-model 和 v-show ),vue 也允许注册自定义指令。注意,在 vue2.0 里面,代码复用的主要形式和抽象是组件——然而,有的情况下,你仍然需要对纯 dom 元素进行底层操作,这时候就会用到自定义指令。
官方建议directive是对纯 dom 元素进行底层操作使用,一般情况下还是建议使用组件的复用。
directive的意义
自定义指令是用来操作dom的。
尽管数据驱动是vue的核心之一,但是在实际情况下,并不是所有的情况都可以用数据来驱动视图,我们不可避免的会在有些情况下有操作dom的需求,所以directive也就出现了。自定义指令就是一种有效的补充和扩展,不仅可用于定义任何的dom操作,并且是可复用的。
官方栗子
code
// 注册一个全局自定义指令 v-focus vue.directive('focus', { // 当绑定元素插入到 dom 中。 inserted: function (el) { // 聚焦元素 el.focus() } }) //局部指令 directive: { focus(el){ el.focus() } }
use
<input v-focus> //input标签自动获得标签
是不是感觉很简单?相信自己,其实vue大法真心不难,难得是如何应用。下面先来简单看看的钩子函数。
钩子函数
钩子参数
实际应用
directive的语法就这么简单,在合适的钩子中做应该做的事就可以了。下面会列出两个使用指令的栗子
集成第三方插件
用了一段时间的vue,其实我都没有留意directive具体使用,一般来言真的很少使用到。直到有一次需要集成第三方插件到vue时才发现,原来directive是集成第三方插件最合适也是最简单的方式。凡是关于第三方的集成,都可以尝试使用directive
import vue from 'vue' import hljs from 'highlight.js' import 'highlight.js/styles/monokai-sublime.css' vue.directive('highlight', { bind(el){ hljs.highlightblock(el); }, })
use
<pre> <code v-highlight> //code here </code> </pre>
如上,我注册了一个全局的指令 highlight。 指令的作用就是高亮代码,当元素带上'v-highlight'时,hljs就会去初始化该dom。
当然我这是可以使用组件来实现这个功能,但绝对没有指令那么方便快捷,下面是一个简略的组件,可以看出,不仅定义和使用都比指令来的复杂。
<template> <pre> <code ref="code"> <slot name="code"></slot> </code> </pre> </template> <script> import hljs from 'highlight.js' import 'highlight.js/styles/monokai-sublime.css' export default { mounted(){ hljs.highlightblock(this.$refs.code); } } </script>
指令验证
如果需要一个可以复用的验证,我们也可以使指令来完成,下面来看一个简单的栗子:
vue.directive('checkname', { //监控数据变化 update(el, binding){ let regex = /^[a-za-z]{6,10}$/g; //=value === oldvalue, 避免重复更新 if(binding.value !== binding.oldvalue){ el.style.border = regex.test(binding.value) ? '' : '1px solid red'; } } })
user
<input v-model='value1' v-checkname='value1'></input> <input v-model='value2' v-checkname='value2'></input> <input v-model='value3' v-checkname='value3'></input> <input v-model='value4' v-checkname='value4'></input> //当value的值不是6-10的字母的时,input的boder变为红色;
result
结果很明显,不符合规则的数据,input的边框变红了。
end
这里只是抄写下官方的文档,举两个栗子,就是那么简单,任性 ( ̄~ ̄) !其实主要想说明白的一件事就是明确dirctive的意义:指令是用来操作dom的,希望能起到抛砖引玉的作用吧。
参考
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持移动技术网。
如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复
VUE+elementui组件在table-cell单元格中绘制微型echarts图
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
vue 路由懒加载中给 Webpack Chunks 命名的方法
网友评论