Angular Rxjs订阅不适用于路由组件

Angular Rxjs订阅不适用于路由组件,angular,rxjs,Angular,Rxjs,我有一个Angular2V4.0.1项目,我正在使用组件路由器进行路由。我正在尝试创建一个共享(单例)服务,作为所有组件的数据存储。如果一个组件更新了服务的一个值,那么其他组件将拥有该值。但是,如果组件不是父组件的子组件,则不知何故,subscribe不会触发 我有一个主AppComponent.ts,其他组件通过组件路由器加载 我不是为每个组件使用单独的提供者,而是在根模块的@NgModule声明中注入服务 AppComponent.ts 从'@angular/core'导入{NgModule

我有一个Angular2V4.0.1项目,我正在使用组件路由器进行路由。我正在尝试创建一个共享(单例)服务,作为所有组件的数据存储。如果一个组件更新了服务的一个值,那么其他组件将拥有该值。但是,如果组件不是父组件的子组件,则不知何故,
subscribe
不会触发

我有一个主AppComponent.ts,其他组件通过组件路由器加载

我不是为每个组件使用单独的提供者,而是在根模块的@NgModule声明中注入服务

AppComponent.ts
从'@angular/core'导入{NgModule};
从“@angular/platform browser”导入{BrowserModule};
从'@angular/http'导入{HttpModule,JsonpModule};
从'@angular/forms'导入{FormsModule};
从'@angular/router'导入{RouterModule,Routes};
从“./confirm.component”导入{ConfirmComponent};
从“./app.component”导入{AppComponent};
从“./other.component”导入{OtherComponent};
从“./some.component”导入{SomeComponent};
从“./directions/placeholder.directive”导入{placeholder directive};
从“/storage.service”导入{StorageService};
//应用程序路线
施工许可:路线=[
{路径:'',重定向到:'/home',路径匹配:'full'},
{路径:'home',组件:AppComponent},
{路径:'other',组件:OtherComponent},
{path:'some',component:SomeComponent},
]
@NGD模块({
导入:[RouterModule.forRoot(appRoutes)、BrowserModule、HttpModule、JsonpModule、FormsModule],
声明:[AppComponent、OtherComponent、SomeComponent、ConfirmComponent、Placeholder指令],
提供者:[存储服务],
引导:[AppComponent],
入口组件:[
确认组件
],
})
导出类AppModule{}
StorageService.ts
从'@angular/core'导入{Injectable,EventEmitter};
从“rxjs/Subject”导入{Subject};
@可注射()
导出类存储服务{
名称:任何;
名称更改:主题=新主题();
构造函数(){
this.name=“杰克”;
}
更改(){
this.name='Jane';
this.nameChange.next(this.name);
}
}
SomeComponent.ts
从'@angular/core'导入{Component};
从“/storage.service”导入{StorageService};
@组成部分({
选择器:“一些”,
模板:`{{storage.name}}

Change`, }) 导出类SomeComponent{ 建造师( 专用存储:存储服务 ){ 设置超时(()=> 此文件为.storage.change(),2000); } 更改(){ this.storage.change(); } }
OtherComponent.ts
从'@angular/core'导入{Component};
从“/storage.service”导入{StorageService};
从“rxjs/Subscription”导入{Subscription};
@组成部分({
选择器:'其他',
模板:`{{name}}

`, }) 导出类OtherComponent{ 名称:字符串; 认购:认购; 建造师( 专用存储:StorageService, ){ this.name=this.storage.name; this.subscription=this.storage.nameChange.subscripte((值)=>{ this.name=值; }); } 恩贡德斯特罗(){ this.subscription.unsubscripte(); } }
我不明白,“但不知何故,如果组件不是父组件的子组件,subscribe不会启动。”什么子组件,什么父组件?如果我启动这个。storage.change();从AppComponent,所有组件都接收到订阅,但从组件调用订阅不起作用。我正在使用SystemJS我正在给出一个场景,请建议我如何实现它。我想通过AJAX调用从组件A获取用户详细信息,并将数据存储在类似$rootScope的东西中。然后我将转到组件B并从$rootScope检索数据。我不想再解雇阿贾克斯了。但是$rootScope在Angular2中不可用,那么如何实现相同的功能呢。?请提供帮助。在您的userService中,您不需要特殊的服务来实现这一点:
users:Observable=this.http.get(url).map(resp=>resp.json()).repeat().share()
那么,用户是一个可观察的对象,它将无限期地重复,而无需另一个http调用。