我已经和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是否提供更好的方法?
答案 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
。