我有一个ListComponent。在ListComponent中单击某个项目时,该项目的详细信息应显示在DetailComponent中。两者都同时显示在屏幕上,因此不涉及路由。
如何告诉DetailComponent单击ListComponent中的哪个项目?
我已经考虑过向父对象(AppComponent)发出事件,并让父对象使用@Input在DetailComponent上设置selectedItem.id。或者,我可以将共享服务与可观察的订阅一起使用。
编辑:通过事件+ @Input设置选定的项目不会触发DetailComponent,但是,以防万一我需要执行其他代码。因此,我不确定这是否可以接受。
但是,这两种方法似乎都比通过Angular 1做事的方式复杂得多,后者是通过$ rootScope。$ broadcast或$ scope。$ parent。$ broadcast实现的。
由于Angular 2中的所有内容都是组件,我很惊讶没有更多关于组件通信的信息。
是否有另一种/更直接的方法来完成此任务?
我一直在通过绑定将父级的setter方法传递给它的子级之一,并使用子级组件中的数据调用该方法,这意味着父级组件已更新,然后可以使用新数据更新其第二个子级组件。它确实需要绑定“ this”或使用箭头功能。
这样做的好处是,孩子不需要特别的共享服务,因此彼此之间不会那么耦合。
我不完全确定这是最佳做法,听到其他人对此的看法会很有趣。