【问题标题】:Angular2 Linking between service and modelAngular2服务和模型之间的链接
【发布时间】:2016-12-13 12:41:55
【问题描述】:

我已经使用 Angular 2 工作了一段时间,但发现自己的问题是我没有找到明确的解决方案,即如何在服务和模型之间创建链接。虽然组件可以注入服务并使其保持单例,使其在全球范围内可用,但我希望在这些组件中声明模型。尝试传递这样的服务似乎会导致它创建当前类状态的“快照”,并且在我将更改应用于我的服务时不会更新。

请允许我举例说明我的意思。采取以下“LanguageObject”模型:它是一个为不同语言存储多个字符串的模型,它应该根据语言服务中当前定义的语言返回正确的字符串:

export class LanguageObject {
  nl : string;
  fr : string;
  en : string;

setvalues(nl : string, fr: string, en: string) {
    this.nl = nl;
    this.fr = fr;
    this.en = en;
  }

  selectedlanguage : string;

  constructor(private languageService : LanguageService) {
    this.selectedlanguage = languageService.language;
  }

  get() :string{
    if (this.selectedlanguage == "nl") {
      return this.nl;
    } else if (this.selectedlanguage == "fr") {
      return this.fr;
    } else {
      return this.en;
    }
  }
}

服务:

@Injectable()
export class LanguageService {


  language : string;

  constructor() {
    this.language = "en";
  }
}

但是模型本身是这样调用的,失去了到服务的正确链接:

constructor(private languageService : LanguageService) {
    this.continuestring = new LanguageObject(languageService);
    this.continuestring.setvalues("Verder","Continuer","Continue");
  }

连续更改服务中语言的值不会导致我的模型更新,除非我将值重新加载到它们中,而我希望它们自动执行此操作。

这引出了我的问题,如何正确地实现允许这些模型检索服务价值的预期效果?我们是使用某种形式的注入,还是 angular2 提供了更好的方法?

【问题讨论】:

    标签: angular


    【解决方案1】:

    可能我在你的问题中遗漏了一些东西,但如果你想LanguageObject.selectedlanguage 总是等于LanguageService.language,你根本不需要selectedlanguage...特别是因为你存储了对@987654324 的引用@ 作为LanguageObject 的私有财产。即

    export class LanguageObject {
        get() :string{
            if (this.languageService.language == "nl") {
                return this.nl;
            } else if (this.languageService.language == "fr") {
                return this.fr;
            } else {
                return this.en;
            }
        }
    }
    

    此外,我会考虑更改设计,以便 LanguageService 将返回语言值,而不是 LanguageObject

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-07-07
      • 2018-11-13
      • 2018-02-14
      • 1970-01-01
      • 1970-01-01
      • 2012-06-28
      • 2011-12-21
      • 2012-07-29
      相关资源
      最近更新 更多