vue.js - 来自常量的 Vue.js 自定义事件
问题描述
我有一个发布某些事件的 Vue.js 组件。
<MyComponent @some-event="myHandler"/>
在组件内部,您有类似的东西
this.$emit('some-event', someData);
很基本。'some-event'
但是为了使代码更简洁,如果我可以在某个地方的常量中定义一个字符串,并且能够$emit()
在声明事件处理程序时使用它,那就太好了。像这样的东西:
const EVENT_NAME = 'some-event';
this.emit(EVENT_NAME, someData);
<MyComponent @{{EVENT_NAME}}="myHandler"/>
我只是编造了@{{EVENT_NAME}}
语法,但希望这个想法是有意义的。这可能吗?
解决方案
您可以使用Dynamic Arguments,例如(作为event_name
常数):
<MyComponent @[event_name]="myHandler" />
但有一些警告:
- 您可以在;中使用的内容有几个限制。
[]
- 对于
event_name
要在模板中使用的常量,模板必须可以访问它,这意味着它应该是一个data
属性、一个计算的或类似的。仅仅在 vue 组件之外的脚本中声明是不够的。 - 属性将被解析为小写,因此您的常量必须是
event_name
,而不是EVENT_NAME
orEvent_Name
(您甚至可以使用它们,但它们将被视为event_name
;请参阅data
下面的声明)。
工作演示:
const EVENT_NAME = 'some-event';
Vue.component(`my-component`, {
template: `
<button @click="myCompInternalHandler">click me to emit an event whose name is the value of event_name</button>
`,
methods: {
myCompInternalHandler() {
this.$emit(EVENT_NAME, {someData: 112233});
}
}
});
new Vue({
el: '#app',
data: {
message: 'Hello Vue.js!',
event_name: EVENT_NAME // key has to be lowercase, because it is used in the template as dynamic attr
},
methods: {
myHandler(e) {
console.log('received at parent:', e);
}
}
})
<script src="https://unpkg.com/vue"></script>
<div id="app">
<my-component @[event_name]="myHandler" />
<p>{{ message }}</p>
</div>
推荐阅读
- r - 如何将多个ggarrange图保存到R中的单个pdf
- php - Webonyx/Graphql-php 入门:如何在 cURL 中获取 API 的响应而不会从 API 实现中获得回声?
- elixir - 测试环境中的 Elixir (UndefinedFunctionError) 函数
- java - AWS - Ubuntu 用户会话停止 Spring Boot 应用程序
- css - 如何使用 CSSProperties 中的 fontWeight 或 fontVariant 来访问 React Native 中的字体变体?
- android - ActivityResultLauncher 传递自定义请求码
- javascript - 使用 Material UI ProgressBar 反应倒计时
- github - 有没有免费的方法可以在没有移动设备的情况下设置 github 2fa?
- twilio - Twilio 验证 API 响应错误 20429“请求过多”阻止 24 小时
- javascript - 例如,我如何在 React.js 中设置部分搜索词的样式,将其设置为粗体或浅色?