2017-07-03 124 views
0

我正在尝试创建一个服务来解析数据到不同路由上的不同组件。Angular 2 Setter和Getter

如果我在相同的组件上调用跟随服务,我会得到我需要的结果,但是如果我尝试从另一个组件获得设置结果,则服务返回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) 

如前所述,如果我在同一个组件中进行通信,这个工作绝对没问题,我有相同的重要ts,提供者和构造函数。

也只需记下组件同级组件

会有人能够帮助或点我在正确的方向,将是非常赞赏。

如果您需要任何额外的代码,请让我知道。

+0

您的注册服务如何?在组件中?在模块中?您能否展示显示您用于注册该服务的提供程序数组的代码? – DeborahK

+0

我正在使用以下提供程序在组件中注册服务:[TestService],在我的构造函数中我有私人testService:TestService,并使用导入{TestService}从'../../../shared/services /test/test.service'; –

+0

@TonyHensler,你确定他们是liblings吗? [这个笨蛋](https://plnkr.co/edit/ANgduQg230dNWLdAFtlm?p=preview)显示你不能注入在兄弟组件 –

回答

2

如果要跨父组件的子组件共享服务,则需要在模块中注册服务,而不是在组件中注册服务。当您在组件中注册服务时,它仅适用于该组件及其子组件。

事情是这样的:

@NgModule({ 
    declarations: [ 
    AppComponent, 
    ProductListComponent, 
    StarComponent 
    ], 
    imports: [ 
    BrowserModule, 
    FormsModule, 
    HttpModule 
    ], 
    providers: [ TestService ], 
    bootstrap: [AppComponent] 
}) 
export class AppModule { } 
0

尝试初始化TestService的变种这样的代码在你的Component.ts构造函数的内部,如果不确定的变种是“TestService的” THA可以工作。

constructor (private testService : TestService){ 
     //at this time testService its already initialized. 
    console.log(this.testService.test); 
}