Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angularjs/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/33.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angularjs 通过服务的角度2组件交互_Angularjs_Angular_Rxjs_Observable_Angular Directive - Fatal编程技术网

Angularjs 通过服务的角度2组件交互

Angularjs 通过服务的角度2组件交互,angularjs,angular,rxjs,observable,angular-directive,Angularjs,Angular,Rxjs,Observable,Angular Directive,我有两个并行指令(与父子指令类似),如果可能的话,我希望它们通过使用observable的服务进行通信。我读过这本书,但它讲的是亲子互动。我试着用两个指令做一个比较,但是没有用 基本上,我想要的是创建一个服务: export class DirService { contentSource = new Subject(); content$ = this.contentSource.asObservable(); } 然后,使用此服务在和之间架起一座桥梁。有人能指出如何实施这一原则

我有两个并行指令(与父子指令类似),如果可能的话,我希望它们通过使用observable的服务进行通信。我读过这本书,但它讲的是亲子互动。我试着用两个指令做一个比较,但是没有用

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

export class DirService {
   contentSource = new Subject();
   content$ = this.contentSource.asObservable();
}
然后,使用此服务在之间架起一座桥梁。有人能指出如何实施这一原则吗

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

  • 我在报纸上读了这篇文章
  • 如果我想让许多指令进行交流,我想observable可以让逻辑更加清晰

谢谢

在引导应用程序时,需要指定
DirService
服务:

bootstrap(AppComponent, [ DirService ]);
并将其从组件提供程序属性中删除:

@Component({
  (...)
  //providers: [ DirService ]
})
这样,您将为整个应用程序(以及两个组件)共享相同的服务实例

请参阅以下链接:

此行为与Angular2依赖性注入的“分层注入器”相关

有关更多详细信息,您可以查看以下问题:

如果您将“共享”服务添加到每个组件的
提供商

@Component({
    selector: 'dir2',
    template: '{{field}}',
    providers: [DirService]
})
然后为每个组件维护一个新实例

要获得共享服务,您可以只在
引导(AppComponent,[DirService])
中添加它,或者在组件和指令的一个共同祖先中添加它,这些组件和指令定义了根组件和共享服务的范围。
这样,每个后代都会得到相同的实例

另见
-

-

thx!根据你的建议,这是一个使用共同祖先的工作。说得好!谢谢