【发布时间】:2019-05-07 16:54:21
【问题描述】:
我有一个带有延迟加载模块的应用程序。我还有一个名为MainModule 的共享模块。这是我非常简单的服务,名为LangService:
@Injectable({
providedIn: 'root'
})
export class LangService {
lang:string = "en";
constructor(public translate: TranslateService) {
this.translate.setDefaultLang( this.lang );
this.translate.use( this.lang );
}
setLang( lang ) {
this.translate.setDefaultLang( this.lang );
this.translate.use( this.lang );
this.lang = lang;
}
}
在我的标签路由中,我有以下内容:
changeLang(lang) {
// lang is for example "fr"
this.langService.setLang(lang);
}
还有我的标签页 html:
<Label [text]="'HOME.Title' | translate"></Label>
现在,当我转到另一条路线时,在它的组件中,我得到了默认值(不是更改后的值):
constructor(public langService:LangService) {
// prints "en" !!!
console.log(this.langService.lang);
};
我已经在我的共享模块中提供了服务,并在任何地方导入了我的共享模块:
providers: [
LangService
],
我正在使用带有 nativescript 的 Angular 7。
【问题讨论】:
-
您应该在 root
@Injectable({ providedIn: 'root' })上提供服务,而不是作为 SharedModule 的提供者。这将允许您仅拥有它的实例,并且可以在整个应用程序中使用, -
@nircraft 我有它在我的服务。已更新。
-
还要确保将其从任何其他模块的
providers列表或MainModule列表中删除 -
@nircraft 这是不可能的。因为我在自己的服务中使用了翻译服务。当我删除
providers它不起作用。请查看更新。 -
您可以让 LangService 和 Translate 服务都在根目录下注入,而不是在共享模块中定义。在其他路线位置使用时可以正常工作。如果你能分享minimal reproducible example,那就太好了
标签: angular nativescript angular-services angular2-nativescript