【发布时间】:2017-12-31 09:39:51
【问题描述】:
我正在使用 Angular4 构建一个 web 应用程序,并且我正在尝试创建一个按钮来调用其他组件上的函数。
我在这里阅读了其他类似的问题,但他们有这样一种情况,即组件是子组件或兄弟组件,并在 html 上声明,例如:
<parent-component>
<child-component></child-component>
<sibling-component></sibling-component>
</parent-component>
但是,我正在处理不同的场景,因为我的组件是通过 routing 调用的,我无法使其工作。
基本上我在页面上有一个header,其中包含一些执行功能的控件,但是这些功能需要触发/更改通过路由加载的其他组件上的数据。
例如,我有路由/store 来显示商店列表,我在此页面上还有一个抽屉,我想在用户单击标题上的按钮时显示它,这就是问题所在,因为我无法将事件从HeaderComponent 传播到StoreComponent。
这些是我的文件:
header.component.ts
@Component({
selector: 'header',
templateUrl: `
<section class="container">
<button (click)="clickFilter()">Open filter</button>
</section>
`
})
export class HeaderComponent {
@Output() onFilter: EventEmitter = new EventEmitter();
clickFilter():void {
this.onFilter.emit('Register click');
}
}
store.component.ts
@Component({
templateUrl: 'store.html'
})
export class StoreComponent {
onFilterClick(event) {
console.log('Fire onFilterClick: ', event);
}
}
// store.html
<article class="card" (onFilter)="onFilterClick($event)">
Test
</article>
但这不起作用。
另外,我实际上不需要调用函数,我可以只传递一个布尔值,例如,绑定到 StoreComponent 上的属性,然后切换 html 文件中的 div。
【问题讨论】:
-
这些组件在应用程序中的排列方式并不完全清楚。 stackoverflow.com/help/mcve 会有所帮助。不处于父子关系的组件可以通过公共父级或通过父级注入器上的服务进行通信。如果不能通过父母进行交流……算一算。
标签: angular