为了账号安全,请及时绑定邮箱和手机立即绑定

vue 子组件emit没效果

vue 子组件emit没效果

慕莱坞森 2019-03-02 18:02:07
请问下为啥在模板里,子组件调用this.$emit,父组件触发不了方法呢?我debugger看events里注册了那个事件然而并没有触发是为啥勒https://jsfiddle.net/BiggerKa...点击预览点击点我啊没有出现alert的效果
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

事件名称不允许用驼峰式,fiddle里看不出来,在浏览器里Vue会发出警告中断执行,模板和触发的方法名称都改成小写就可以成功,亲测可行。

// template<child-com @handle-tip="handleTip" :param="childParam"></child-com>// script
methods: {
  handleTip: function () {
    this.$emit('handle-tip', 'haha')
  }
}


查看完整回答
反对 回复 2019-03-02
?
蝴蝶刀刀

TA贡献1801条经验 获得超8个赞

事件名
不同于组件和 prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。举个例子,如果触发一个 camelCase 名字的事件:

this.$emit('myEvent')
则监听这个名字的 kebab-case 版本是不会有任何效果的:

<my-component v-on:my-event="doSomething"></my-component>
不同于组件和 prop,事件名不会被用作一个 JavaScript 变量名或属性名,所以就没有理由使用 camelCase 或 PascalCase 了。并且 v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以 v-on:myEvent 将会变成 v-on:myevent——导致 myEvent 不可能被监听到。

因此,我们推荐你始终使用 kebab-case 的事件名。


查看完整回答
反对 回复 2019-03-02
  • 2 回答
  • 0 关注
  • 2141 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信