vue动态指令
vue动态指令
vue 在 2.6.0 版本的时候新增了动态参数,可以用方括号括起来的 JavaScript 表达式作为一个指令的参数:
1 | <a v-bind:[attributeName]="url"> ... </a> |
这里的
attributeName·会被作为一个 JavaScript 表达式进行动态求值,求得的值将会作为最终的参数来使用。
1 | export default { |
v-bind:[attributeName]等同于:bind:href='url'同样地,你可以使用动态参数为一个动态的事件名绑定处理函数:
1 | <a v-on:[eventName]="doSomething"> ... </a> |
在这个示例中,当 eventName 的值为 “focus” 时,v-on:[eventName] 将等价于 v-on:focus。
对动态参数的值的约束:
动态参数预期会求出一个字符串,异常情况下值为 null。这个特殊的 null 值可以被显性地用于移除绑定。任何其它非字符串类型的值都将会触发一个警告。
对动态参数表达式的约束:
动态参数表达式有一些语法约束,因为某些字符,如空格和引号,放在 HTML attribute 名里是无效的。例如:
1 | <!-- 这会触发一个编译警告 --> |
变通的办法是使用没有空格或引号的表达式,或用计算属性替代这种复杂表达式。
1 | <a v-bind:[someAttr]="value"> ... </a> |
在 DOM 中使用模板时 (直接在一个 HTML 文件里撰写模板),还需要避免使用大写字符来命名键名,因为浏览器会把 attribute 名全部强制转为小写:
1 | <!-- |
动态指令参数也可以用在 v-slot 上,来定义动态的插槽名:
1 | <base-layout> |
总结
1 | <!-- 动态 attribute 名 (2.6.0+) --> |
1 | <!-- 动态事件 (2.6.0+) --> |
1 | <!-- 动态的插槽名 (2.6.0+) --> |
评论
