【发布时间】:2017-07-05 20:48:56
【问题描述】:
app.component.ts 是我的 Angular 2 应用程序的入口点。它包含两个组件:一个标题和一个sidenav。
@Component({
selector: 'app-root',
template: `
<app-header></app-header>
<app-sidenav></app-sidenav>
`
})
export class AppComponent { }
这是我想要实现的目标:在 <app-header> 组件内,我有一个(菜单)按钮,它应该会触发 <app-sidenav> 组件的打开。
换句话说,<app-header> 中按钮的点击事件应该触发<app-sidenav> 组件内的open() 方法。
-
header.component.ts:
@Component({ selector: 'app-header', template: ` <button (click)="onSidenavOpen()">Menu</button> ` }) export class HeaderComponent { constructor() { } onSidenavOpen() { // trigger the opening of the <app-sidenav> component } } -
sidebar.component.ts:
@Component({ selector: 'app-sidenav', template: ` <md-sidenav #sidenav> // bla bla, sidebar </md-sidenav> ` }) export class SidenavComponent { constructor() { } open(sidenav) { sidenav.open(); } close(sidenav) { sidenav.close(); } }
我阅读了 Angular 2 文档中的 component interaction section,但我正在努力寻找在这两个组件之间进行通信的最佳方法。我的总体意图是为每个组件封装尽可能多的逻辑。
您将如何处理我的用例?你会创建一个中间服务吗?请分享一个例子。
【问题讨论】:
-
angular.io/docs/ts/latest/cookbook/…(不要问为什么标题上写着“父子通信”。使用服务是为了组件通信,无论它们如何相关或不相关。