我有一个ListComponent.在ListComponent中单击某个项目时,该项目的详细信息应显示在DetailComponent中.两者都在屏幕上同时出现,因此不涉及路由.
如何告诉DetailComponent单击ListComponent中的哪个项目?
我考虑过将一个事件发送到父(AppComponent),并让父设置在DetailComponent上使用@Input设置selectedItem.id.或者我可以使用具有可观察订阅的共享服务.
编辑:通过事件+ @Input设置所选项目不会触发DetailComponent,但是,如果我需要执行其他代码.所以我不确定这是一个可以接受的解决方案.
但是这两种方法看起来都比Angular 1的做法复杂得多,这种做法要么通过$ rootScope.$ broadcast或$ scope.$ parent.$ broadcast.
由于Angular 2中的所有内容都是组件,我很惊讶没有关于组件通信的更多信息.
有没有其他/更直接的方法来实现这一目标?
我想从在路由器插座内部渲染的子组件进行导航.我的父组件有一个路由器配置,我想手动导航一些事件.但是我不知道如何在没有输出的情况下从子节点向父节点传递一些数据(用于导航).因为这种结构不起作用
<router-outlet (navigateTo)="navigateToMessagePart($event)"></router-outlet>
Run Code Online (Sandbox Code Playgroud)
我怎么能以正确的方式做到这一点?也许从孩子那里导航吧?但我如何从孩子那里得到父方法.非常感谢您的帮助!
在角度为2的angular.io教程的服务部分,我点击了一个名为of.for的方法,例如:
getHeroes(): Observable<Hero[]> {
return of(HEROES);
}
Run Code Online (Sandbox Code Playgroud)
或在下面的样本:
getHero(id: number): Observable<Hero> {
// Todo: send the message _after_ fetching the hero
this.messageService.add(`HeroService: fetched hero id=${id}`);
return of(HEROES.find(hero => hero.id === id));
}
Run Code Online (Sandbox Code Playgroud)
在angular.io刚刚解释
使用()的RxJS返回一个模拟英雄的Observable(Observable).
并没有解释为什么我们应该使用功能,它究竟做了什么,它有什么好处?