我制作了一个操作一些元素的 VueJS 组件<select>。此 UI 的结果是用户选择一个值。
我在组件中有一个函数,computed用于在屏幕上显示用户选择的值。
我如何将此值传递回父 VueJS 事物?
这似乎与此有关$emit,但我没有看到我有活动。
我已经按照此处的建议筹集了一份资金,但现在还没有发生。
在组件中:
computed: {
selectedCode: function () {
var selected = '(No code selected.)';
if (this.category) { selected = this.category; }
if (this.code) { selected = this.code; }
this.$emit('selectedCode', selected);
return selected;
},
Run Code Online (Sandbox Code Playgroud)
在父 Vue 应用程序中:
<code-selector v-bind:code="code" v-on:selectedCode="codeSelect"></sic-selector>
Run Code Online (Sandbox Code Playgroud)
和
methods:
{
selectedCode: function (z) {
console.log(z);
},
Run Code Online (Sandbox Code Playgroud)
这里的问题主要是因为发出了驼峰命名的事件名称。所以,正如文档中提到的:
\n\n\n如果发出驼峰命名的事件名称:
\nRun Code Online (Sandbox Code Playgroud)\nthis.$emit(\'myEvent\')\n听 kebab-cased 版本不会有任何效果:
\nRun Code Online (Sandbox Code Playgroud)\n<!-- Won\'t work -->\n<my-component v-on:my-event="doSomething"></my-component>\n与组件和 props 不同,事件名称永远不会在 JavaScript 中用作变量或属性名称,因此\xe2\x80\x99s 没有理由使用驼峰命名法或帕斯卡命名法。此外,
\nv-onDOM 模板内的事件监听器将自动转换为小写(由于 HTML\xe2\x80\x99s 不区分大小写),因此v-on:myEvent将变为v-on:myevent\xe2\x80\x93 ,从而myEvent无法监听。出于这些原因,我们建议您始终使用短横线命名的事件名称。
\n
因此,只需发出一个短横线大小写的事件名称,例如:
\nthis.$emit(\'selected-code\', selected);\nRun Code Online (Sandbox Code Playgroud)\n然后你就可以轻松地听它,如下所示:
\n<code-selector v-on:selected-code="codeSelect"></code-selector>\nRun Code Online (Sandbox Code Playgroud)\n这是一个工作演示:
\nthis.$emit(\'myEvent\')\nRun Code Online (Sandbox Code Playgroud)\r\n<!-- Won\'t work -->\n<my-component v-on:my-event="doSomething"></my-component>\nRun Code Online (Sandbox Code Playgroud)\r\n注意:请注意,演示在您在帖子中共享的问题的答案中共享,我可以从子组件到父组件获取计算数据吗?在codepen上,有一个简单的发出事件名称,例如:
\nthis.$emit(\'update\', e.target.valueAsNumber)\nRun Code Online (Sandbox Code Playgroud)\n因此,该代码在该演示中可以正常工作。
\n| 归档时间: |
|
| 查看次数: |
3286 次 |
| 最近记录: |