我正在尝试创建一个服务来将数据解析到不同路由上的不同组件。
如果我在同一个组件上调用follow服务,我会得到我需要的结果,但如果我尝试从另一个组件获取设置结果,则服务返回undefined。
这是我的服务: -
import {Injectable} from '@angular/core';
@Injectable()
export class TestService {
public _test:any;
set test(value:any) {
this._test = value
}
get test():any {
return this._test;
}
}
我将服务设置为: -
this.testService.test = 3;
我使用以下内容接收组件中的服务数据: -
console.log(this.testService.test)
如前所述,如果我在同一个组件中进行通信,那么这个工作绝对正常,我有相同的导入,提供者和构造函数。
还要注意组件是兄弟组件
任何人都能够帮助或指出我正确的方向,我们将非常感激。
如果您需要任何额外代码,请告知我们。
答案 0 :(得分:7)
如果要跨父组件的子组件共享服务,则需要在模块中注册服务,而不是在组件中注册。在组件中注册服务时,它仅对该组件及其子组件可用。
这样的事情:
@NgModule({
declarations: [
AppComponent,
ProductListComponent,
StarComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [ TestService ],
bootstrap: [AppComponent]
})
export class AppModule { }
答案 1 :(得分:1)
如果您尝试在来自不同模块的两个组件之间进行交互,则必须将服务导入到应用模块(即主模块)中,这样get方法不会返回
答案 2 :(得分:0)
尝试在Component.ts中的构造函数内部初始化testService var,如果未定义的var是“testService”,则可以正常工作。
constructor (private testService : TestService ){
//at this time testService its already initialized.
console.log(this.testService.test);
}