vue 自定义指令

为什么要自定义指令

//创建方式1:全局
vue.directive('directName',{})
//创建方式2:组件内
directives: {
  directName: {
    // 钩子
  }
}
//使用方式1:在模板中使用
<div v-directName></div>
//使用方式2:jsx语法中
export default{
	name:'app',
	render(){
		return (
			<div id="app">
				<div v-directName></div>
			</div>
		)
	}
}

注意:指令使用时要加前缀 v-

什么时候用自定义指令

  • 当methods中或者组件生命周期中存在操作DOM / BOM逻辑的时,就应该思考是否可以抽象成一个自定义指令

如何创建自定义指令

自定义指令遵循设置原则中的开闭原则,通过钩子函数让开发者在不同的阶段处理不同的逻辑

钩子函数介绍:

Vue.directive('name',{
  //只调用一次,在指令绑定到元素的时候执行
  //在这里可以进行一次性的初始化操作
  //el.parentNode = null
  bind: function(el, binding, vnode) {},
  //被绑定元素插入父节点时调用
  // (仅保证父节点存在,但不一定已被插入文档中)。
  //el.parentNode = node
  inserted: function(el, binding, vnode) {},
  //所在组件的VNode 更新时调用,
  //但是可能发生在其子VNode 更新之前。
  //指令的值可能发生了改变,也可能没有,
  //但是可以通过比较更新前后的值来忽略不必要的模板更新
  update: function(el, binding, vnode, oldVnode) {},
  //指令所在组件的VNode 及其子VNode 全部更新后调用。
  componentUpdate: function(el, binding , vnode, oldVnode){},
  //只调用一次,在指令与元素解除绑定时调用
  unbind(el, binding, vnode){}
})

钩子参数介绍:

注意:这些参数除了el都应该是只读的,不建议修改,如果要在钩子间传递数据建议通过元素的datset

{
  //指令所绑定的元素,可以用来直接操作DOM
  el,
  // binding是一个对象, 包含以下属性
  {
    //指令名,不包括v-前缀。
    name ,
    //指令的绑定值, 例如: v-my-directive="1 + 1”中
    //绑定值为2。
    value ,
    //指令绑定的前一个值,
    //仅在update 和componentUpdated 钩子中可用。
    oldValue,
    //宇符串形式的指令表达式。
    //例如v-my-directive="1 + 1" 中,表达式为"I + 1"。
    expression ,
    //传给指令的参数,可选。
    //例如v-my-directive:foo 中,参数为“foo"。
    arg,
    //一个包含修饰符的对象。
    //例如: v-my-directive.foo.bar 中,
    //修饰符对象为{ foo: true, bar: true }。
    modifiers
  },
  //Vue编译生成的新虚拟节点
  vnode ,
  //上一个虚拟节点,仅在update 和componentUpdated 钩子中可用。
  oldVnode
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值