vue自定义指令--动态参数绑定

在企业微信侧边栏应用中,给`dialog`添加了拖拽功能,但是因为`dialog`高度超过了页面高度,所以高度100%时拖拽有个bug--自动贴到窗口顶部而且企业侧边栏宽高都有限制,拖拽效果并不理想,所以就想缩小`dialog`再进行拖拽。

拖拽的指令是自定义的,原本想像绑定`class`一样根据一个参数来动态绑定指令,发现没有这种功能。后来看了文档,可以给指令动态传递参数,根据传递的参数来判断之后的行为。

自定义指令 — Vue.js

封装的指令在组件中引用

vue自定义指令--动态参数绑定_第1张图片

dialogDrag是自定义的指令名称

zoom是传递的参数

在`doalog`标题行添加放大缩小图标,并添加事件,缩小时才添加拖拽功能,zoom初始值为false,

vue自定义指令--动态参数绑定_第2张图片

vue自定义指令--动态参数绑定_第3张图片

一个指令定义对象可以提供如下几个钩子函数 (均为可选):

  • bind:只调用一次,指令第一次绑定到元素时调用。在这里可以进行一次性的初始化设置。

  • inserted:被绑定元素插入父节点时调用 (仅保证父节点存在,但不一定已被插入文档中)。

  • update:所在组件的 VNode 更新时调用,但是可能发生在其子 VNode 更新之前。指令的值可能发生了改变,也可能没有。但是你可以通过比较更新前后的值来忽略不必要的模板更新 。

我们可以在bind方法中判断是否添加拖拽功能

  • binding:一个对象,包含以下 property:
    • name:指令名,不包括 v- 前缀。
    • value:指令的绑定值,例如:v-my-directive="1 + 1" 中,绑定值为 2
    • oldValue:指令绑定的前一个值,仅在 update 和 componentUpdated 钩子中可用。无论值是否改变都可用。
    • expression:字符串形式的指令表达式。例如 v-my-directive="1 + 1" 中,表达式为 "1 + 1"
    • arg:传给指令的参数,可选。例如 v-my-directive:foo 中,参数为 "foo"
    • modifiers:一个包含修饰符的对象。例如:v-my-directive.foo.bar 中,修饰符对象为 { foo: true, bar: true }

vue自定义指令--动态参数绑定_第4张图片

 在`update`钩子函数中更新

vue自定义指令--动态参数绑定_第5张图片

你可能感兴趣的:(vue.js,前端,javascript)