慢慢地掌握了 Angular 2,但我在一个特定问题上陷入了死胡同。
如果你有这样的安排;
<parent>
<child/>
</parent>
我可以使用 @Input() 通知子级父级中的更改,并让它监听更改。
我可以使用 @Output() 和 EventEmitters 通知父级子级的更改。
我现在正在研究的是通知路由组件(单击链接时动态加载的组件)有关主 appComponent 中发生的特定事件。请参阅下面的示例;
<app>
<button (click)='addEntity()>Add</button>
<router-outlet></router-outlet>
</app>
我希望能够通知加载到路由器出口的组件该按钮已被单击。
使用的一个示例是具有多个功能(英雄/联系人/宠物等),每个功能都有自己的用于添加实体的对话框。根据所选的路由,需要通知所选的功能组件(例如 ContactComponent)以显示其特定的详细信息组件/视图/模板(例如 contact-detail.component)。
实现这一目标的最佳方法是什么?
Cheers
还可以仅使用共享服务在不同组件之间进行通信,例如通过这样的信使服务:
信使服务
import { Injectable } from '@angular/core';
import { BehaviorSubject } from 'rxjs';
import { Observable } from 'rxjs/Rx';
@Injectable()
export class MessengerService {
private messageSource: BehaviorSubject<boolean> = new BehaviorSubject(true);
public message = this.messageSource.asObservable();
public buttonClicked(value: boolean) {
this.messageSource.next(value);
}
}
父组件
export class ParentComponent {
constructor(private messengerService: MessengerService) { }
addEntity() {
this.messengerService.buttonClicked(true);
}
}
子组件
import { Subscription } from 'rxjs/Rx';
export class ChildComponent implements OnInit, OnDestroy {
private messageSubscription: Subscription;
constructor(private messengerService: MessengerService) { }
ngOnInit() {
this.messageSubscription = this.messengerService.message.subscribe(m => {
// Act upon the click event
});
}
ngOnDestroy() {
this.messageSubscription.unsubscribe();
}
}
这将是一种解耦组件并依赖消息服务的干净方法(您可以在需要时在多个组件中订阅该服务)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)