vue2 vue3 中指令总结

vue 内置了一些指令,也提供了自定义指令的接口。

指令的作用:可把一些可复用的逻辑封装成指令,以实现逻辑复用,尤其是需要直接操作 DOM 时,可把这些操作封装成指令,能极大提高代码复用性和可维护性。

指令按照使用范围看,分为全局指令局部指令(在某个组件内部使用的)。

指令和组件一样,具有一些在特定时期执行的函数,叫作指令钩子,就是通过它们定义指令的。

使用方式

有一个 v-test 指令。

<template>
  <div v-test:disabled.foo="'directive'">
    <h1>{
  { msg }}</h1>
  </div>
</template>

: 之后的是指令参数,类似 v-on:keyup 中的 keyup
. 之后的时指令修饰符,foo 是修饰符。

参数只能有一个,修饰符可有多个。

v-test:disabled:boo.foo.zoo="msg"

在指令内部,可获取到这样的对象:

{
   
  arg: "disabled:boo"
  modifiers: {
   
    foo: true,
    zoo: true
  }
}

希望不同情况下绑定不同的参数,可使用动态参数

v-test:[argu].foo.zoo="msg"

参数必须在修饰符之前。

指令的等号后面是指令表达式,其值对应 binding 对象的 value 属性。

binding 一个对象:

{
   
  arg: "disabled",
  expression: "msg",
  modifiers: {
   
    foo: true
  },
  name: "test",
  value: "你好",
}

vue2 指令定义方式

以插件的形式定义一个全局 v-click-outside :

export const clickOutside = (Vue, options) => {
   
  Vue.directive('clickOutside', {
   
    inserted(el, binding, vnode) {
   
      const {
   
        value
      } = binding
      // const _this = vnode.context
      // NOTE 技巧:处理函数挂载在元素上,方便解绑时移出事件监听
      el.onClick = ({
    
        target
      }) => {
   
        if (el.contains(target)) {
   
          // 点击内部
          console.log('clickInside')
        } else {
   
          // 点击外部
          console.log('clickOutside')
          value && value()
        }
      }
      document.addEventListener('click', el.onClick, false)
    },
    unbind(el, binding, vnode) {
   
      document.removeEventListener('click', el.onClick, false)
    },
  })
}

注册插件:

main.js

Vue.use(clickOutside)

使用:

<template>
  <div>
    <h3>测试 v-click-outside</h3>
    <div v-click-outside="onClickOutside"<
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值