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 和非原始值

Vue引发的getter和setter

由Vue引发的getter和setter思考

如何在 v-model 中为基于类的组件使用 getter 和 setter?

JS中的getter和setter