Angular 2 Setter 和 Getter
Posted
技术标签:
【中文标题】Angular 2 Setter 和 Getter【英文标题】:Angular 2 Setter and Getter 【发布时间】:2017-12-07 00:20:50 【问题描述】:我正在尝试创建一个服务来将数据解析到不同路由上的不同组件。
如果我在同一个组件上调用后续服务,我会得到我需要的结果,但如果我尝试从另一个组件获取设置的结果,服务会返回 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)
如前所述,如果我在同一个组件中进行通信,那么我的导入、提供程序和构造函数都相同。
另外请注意,组件是同级组件
谁能帮助或指出正确的方向,将不胜感激。
如果您需要任何额外的代码,请告诉我。
【问题讨论】:
您如何注册服务?在组件中?在模块中?你能展示一下你用来注册服务的提供者数组的代码吗? 我正在使用以下提供程序在组件中注册服务:[TestService],在我的构造函数中我有私有 testService:TestService,并使用 import TestService from '../.. /../shared/services/test/test.service'; @TonyHensler,你确定他们是诽谤者吗? This plunker 表明您无法注入在兄弟组件的提供者中定义的服务 @Maximus 100% 确定他们是兄弟姐妹。如果我无法使用服务将变量共享给兄弟组件,我将如何实现我想要做的事情? 顺便说一句,实现属性和使用公共字段有什么意义? 【参考方案1】:如果你试图在来自不同模块的两个组件之间进行交互,那么你必须将你的服务导入应用模块(即主模块),这样get方法不会返回
【讨论】:
【参考方案2】:尝试在您的 Component.ts 的构造函数中像此代码一样初始化 testService var,如果未定义的 var 是 "testService"。
constructor (private testService : TestService )
//at this time testService its already initialized.
console.log(this.testService.test);
【讨论】:
【参考方案3】:如果要跨不是父组件子组件的组件共享服务,则需要在模块中注册服务,而不是在组件中。当您在组件中注册服务时,它仅适用于该组件及其子组件。
类似这样的:
@NgModule(
declarations: [
AppComponent,
ProductListComponent,
StarComponent
],
imports: [
BrowserModule,
FormsModule,
HttpModule
],
providers: [ TestService ],
bootstrap: [AppComponent]
)
export class AppModule
【讨论】:
以上是关于Angular 2 Setter 和 Getter的主要内容,如果未能解决你的问题,请参考以下文章
子模型 getter 和 setter 不能在 angular 2/4 中工作
Angular @Input getter/setter 和非原始值