vue.js - 为自定义事件使用 Vue 原型
问题描述
我目前有这样的事情:
// Emit event:
<btn @click="$emit('saveJsonFile') />
// Catch event:
<Component @saveJsonFile="doSomething" />
但是,我尝试远离魔术字符串(事件),相反,我希望有一个将事件名称作为常量的文件。
例子:
// events.js
export const EV_SAVE_JSON_FILE = 'saveJsonFile'
并使其成为全局实例:
import * as EVENTS from './events.js'
Vue.prototype.$EV = EVENTS
现在我像这样使用它:
// Child
<btn @click="$emit($EV.EV_SAVE_JSON_FILE) />
但是我如何在父母身上使用它?我收到一个 Vue ESLint 错误,指出它是无效的 v-on: v:on directives dont support the modifier 'ev_save_json_file'
。
// Error
<Component @[$EV.EV_SAVE_JSON_FILE]="doSomething" />
我还尝试使事件在 small caps 中保持不变<Component @[$ev.ev_save_json_file]="doSomething" />
,但行为相同。
帮助!
解决方案
我不认为 vue 模板可以解释动态 v-on:xxx 指令。但是,您可以通过使用泛型v-on
指令来实现您所描述的效果。详情在这里:
https://github.com/vuejs/vue/issues/4703
所以这些是相同的:
<sample-component v-on:click="someHandler" />
<sample-component v-on="{ click: someHandler }" />
回到你的问题,你的组件可以这样重写:
<Component v-on="{ [$EV.EV_SAVE_JSON_FILE]: doSomething }" />
推荐阅读
- delphi - 让 Delphi 使用新版本的 Microsoft Access 读取数据库
- kubernetes - 使用 nginx-ingress 在 gke 中进行 gzip
- python - Pandas GroupBy 后缺少列(不是 GroupBy 列)
- javascript - Javascript 正则表达式 - 捕获前面有另一个字符串的字符串
- django - 获取与使用 ModelMultipleChoiceField 时添加的对象相关的所有对象
- docker - 使用 docker 的多台机器的 Redis 集群
- twilio-flex - 如何解决“警告:无效的 DOM 属性 `fill-rule`。您的意思是 `fillRule`?” 在 Twilio Flex 上
- vim - vim 命令在以模式开头的文件中所有行的末尾添加分号
- processing - 平移后按定义的量旋转每个圆 - 处理
- powershell - 错误:制作:*** 没有规则来制作目标“makefile”。停止。使用 Powershell 和 Gnuwin32