Vue 父组件监听不到子组件传递的事件

在看 Vue 官方文档的时候,做了一个小例子,发现父组件监听子组件抛出的事件死活监听不了,也不报错!
父组件:

<div id="app">
    <text-document
        :title="title"
        @changeText="changeTextFun"
    ></text-document>
</div>
let VM = new Vue({
    el: "#app",
    data: {
        title: 'this is the title'
    },
    methods: {
        changeTextFun: function (val) {
            console.log(val)
        }
    }
})

子组件:

Vue.component('text-document', {
    props: ['title'],
    data: function () {
        return {
            ownTitle: this.title,
            otherWords: 'this is other words'
        }
    },
    template: `
        <div>
        <p>{{ ownTitle }}</p>
        <button
            @click="$emit('changeText', 10)"
        >Change Text</button>
        </div>
    `
})

在我往回看的时候找到了问题所在, 这是官网给的答案:

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

HTML 是大小写不敏感的,它会将所有大写转换为小写,所以永远监听不到子组件的 changeText 事件,因此:

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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • title: 风格指南type: style-guide 这里是官方的 Vue 特有代码的风格指南。如果在工程中使...
    ChenyuMa阅读 1,088评论 1 1
  • 详细内容可以到vue官方文档查看 指令 指令 (Directives) 是带有 v- 前缀的特殊特性。指令特性的值...
    漫若浮光z阅读 4,882评论 0 1
  • 什么是组件? 组件 (Component) 是 Vue.js 最强大的功能之一。组件可以扩展 HTML 元素,封装...
    youins阅读 9,528评论 0 13
  • 组件注册 1.组件名:建议组件名的定义不要省略,命名规则为字母全小写-且包含一个连字符my-component-n...
    大乌冬阅读 319评论 0 0
  • 组件注册 在注册一个组件的时候,我们始终需要给它一个名字。比如: 该组件名就是 Vue.component 的第一...
    胜过夜的美阅读 1,025评论 0 5