角度2组件通过服务进行交互

lys*_*030 2 observable rxjs angularjs angular-directive angular

我有两个并行指令(与父子一样),如果可能的话,我希望它们通过使用observable的服务进行通信.我已经阅读了官方组件交互guidline,但它讨论了父子互动.我尝试用两个指令制作一个plunker但它不起作用.

基本上,我想要的是创建一个服务:

export class DirService {
   contentSource = new Subject();
   content$ = this.contentSource.asObservable();
}
Run Code Online (Sandbox Code Playgroud)

然后,使用此服务在<dir1>和<dir2>之间建立桥梁.有人能指出如何实施这个senerio?

顺便说一句,我选择使用observable主要是因为:

  • 我在这篇帖子中读到了帖子.
  • 如果我想要许多指令进行通信,我猜可观察可以使逻辑更清晰.

谢谢!

Gün*_*uer 5

如果您providers为每个组件添加"共享"服务

@Component({
    selector: 'dir2',
    template: '{{field}}',
    providers: [DirService]
})
Run Code Online (Sandbox Code Playgroud)

然后为每个组件维护一个新实例.

要获得共享服务,您只需将其添加bootstrap(AppComponent, [DirService])到定义根组件和共享服务范围的组件和指令的一个共同祖先中.
这样每个后代都会获得相同的实例.

Plunker的例子

另请参阅
- AngularJs 2 - 创建的多个服务实例
- 如何在Angular2中正确使用依赖注入(DI)?