【发布时间】:2020-01-17 00:38:30
【问题描述】:
我有一个组件可以发出可以成功收听的事件:
<email-widget
v-bind:company-id="clicked_company_id"
v-bind:project-id="clicked_project_id"
v-on:project-clicked="onClickProjectId"
>
</email-widget>
我现在正在更新我的系统以使用路由器,并且我有一个如下所示的程序化路由器:
let emailComponent= Vue.component('email-widget')
const routes = [
{ path: '/settings', component: Bar },
{
path: '/emails',
name: 'emails',
component: emailComponent
},
]
router.push({ name: 'emails',
params: {}
})
这会正确呈现。
但是如何为事件添加监听器呢?
更新:
此解决方案有效:
<router-view
:company-id="clicked_company_id"
:project-id="clicked_project_id"
@project-clicked="onClickProjectId">
</router-view>
然而,路由器视图的全部意义在于切换其中的组件。如果第二个组件也发出project-clicked,但我想以不同的方式处理它,我该怎么做?
基本上,我想将侦听器绑定到我之前创建为emailComponent 的组件实例,不 绑定到router-view。
【问题讨论】:
-
既然您需要以不同的方式处理事件,为什么不能将它们放在单独的组件中?
-
因为事件类型触发了同屏其他独立组件的状态变化。基本上,您单击电子邮件中的不同内容,它会在其他地方显示信息。但它可以显示电子邮件以外的其他内容,并且该组件可以发出相同的事件字符串,但另一个组件的行为应该不同。
-
好的,明白了。但是很抱歉,我仍然无法理解为什么这些处理程序不能进入组件本身。
-
如果处理程序进入组件内部,它不会将所有组件紧密地绑定在一起吗?对我来说,组件的全部承诺是松散绑定:它们不必知道是什么驱动了它们的状态,而应该只是响应式地响应。
-
“响应式响应”——就是这样,没有先验知识或对任何要响应的内容的引用(如组件内
props或父组件数据),视图如何决定什么甚至在模板或方法中使用/调用?除非我错过了什么。但可能有适合您的用例的解决方法。
标签: vue.js vuejs2 vue-component vue-router