use*_*372 1 vue.js vue-component vuejs2
我有一个子组件,它在创建的函数中发出事件
created: function(){
this.$emit('onPageTitleChange', this.pageTitle);
this.updateList()
}
Run Code Online (Sandbox Code Playgroud)
我在#app div中有这个(我正在向vue实例发起攻击):
<h2 class="no-margin-bottom" v-on:onPageTitleChange="updatePageTitle">{{ pageTitle }}</h2>
Run Code Online (Sandbox Code Playgroud)
并且vue应用程序(父应用程序)的upatePageTitle定义为:
methods: {
updatePageTitle(title){
this.pageTitle = title;
}
},
Run Code Online (Sandbox Code Playgroud)
页面标题没有更改-我缺少什么?
这里有两个问题。首先,需要在发出事件的组件的父级中定义侦听器。如果正在使用路由器(如注释中所指出),则可以将侦听器添加到中router-view。
<router-view @on-page-title-change="updatePageTitle"></router-view>
Run Code Online (Sandbox Code Playgroud)
其次,当在DOM中定义模板(即不是字符串或单个文件组件模板)时,则需要注意camelCase vs kebab-case问题。HTML中的属性不区分大小写。我发现最好只是避免曾经发出骆驼事件。既然如此,发出一个烤肉串事件。
this.$emit('on-page-title-change', this.pageTitle);
Run Code Online (Sandbox Code Playgroud)
并如上所示收听。
这是一个工作示例。
<router-view @on-page-title-change="updatePageTitle"></router-view>
Run Code Online (Sandbox Code Playgroud)
this.$emit('on-page-title-change', this.pageTitle);
Run Code Online (Sandbox Code Playgroud)