Angular2服务和模型之间的链接

时间:2016-12-13 12:41:56

标签: angular

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

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

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");
  }

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

这导致了我的问题,如何才能正确地实现允许这些模型检索服务价值的预期效果?我们使用注射形式,或者角度2是否提供更好的方法?

1 个答案:

答案 0 :(得分:0)

我可能会在您的问题中遗漏某些内容,但如果您希望LanguageObject.selectedlanguage始终等于LanguageService.language,则根本不需要selectedlanguage。 ..特别是因为您将LanguageService的引用存储为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