我遇到了一个v-dialog组件的Vuetify示例,它有一个名为activator的作用域插槽,定义如下:
<template v-slot:activator="{ on }">
<v-btn
color="red lighten-2"
dark
v-on="on"
>
Click Me
</v-btn>
</template>
字符串
我从VueJS文档中理解了scoped slot的目的和解构slot props的概念,但我不明白v-on="on"
在这个例子中的含义。特别是当事件没有用v-on
指令指定时,它意味着什么?
VueJS docs on v-on
只显示了它与显式指定的事件名称(例如v-on:click="..."
)结合使用的情况,但没有解释仅将其用作v-on="..."
。
有人能解释一下这个语法和它在Vuetify示例中的用法吗?
1条答案
按热度按时间jhdbpxl91#
TLDR:
基本用法
字符串
所以基本上
@click="..."
等于v-on:click="..."
等于v-on="{click:...}"
TLDR:
vuetify实现:
型
一些感悟:
如果您想抽象组件并一次传递多个侦听器,而不是编写多行赋值,则它很有用。
考虑一个组件:
的字符串
给定上面的组件,您可以访问插槽属性并将其传递到自定义组件中:
型
在普通的JavaScript中更容易看到它:
比较上面的组件-使用render函数而不是template:
型
源码中:
如果
v-on="eventsObject"
为空,则将调用方法bindObjectListener
,从而将事件分配给data.on
。这发生在
createComponent
范围内。最后,
listeners
作为VNodeComponentOptions
传递,并由updateListeners
更新。Vue扩展的地方-检查Vuetify实现:
当考虑到可以连接和扩展vue示例时,可以说服自己任何组件都可以简化为更原子的版本。
这就是vuetify通过创建
activator mixin
在v-dialog
组件中使用的内容。现在我们可以追踪
activatable
挂载的on
的内容:有了上面的代码片段,剩下的就是将其实现到实际的组件中:
型