背景
最近基于angular 4.4.3和ionic 3.7.1写了一个lazyload的小程序,做i18n的一些实践整理。
框架
angular@4.4.4, ionic@3.7.1, @ngx-translate/core@8.0.0, @ngx-translate/http-loader@2.0.0
导入
非懒加载模块部分
可以在AppModule或者自定义的公共组件模块中去加载TranslateModule。
比如:
import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {TranslateModule} from '@ngx-translate/core';
@NgModule({
imports: [
BrowserModule,
TranslateModule.forRoot()
],
bootstrap: [AppComponent]
})
export class AppModule { }
或者:
@NgModule({
exports: [
CommonModule,
TranslateModule
]
})
export class SharedModule { }
这里要注意点:在AppModule中导入的时候,使用了forRoot()方法,但是在公共模块SharedModule中导入的时候,不能使用TranslateModule.forRoot()方法。这样可能会使得整个依赖注入树中存在多个TranslateModule的实例。如果有必要的话,倒是可以使用TranslateModule.forChild()方法.
懒加载模块中
在懒加载的模块中,我们需要使用下面的方式:
@NgModule({
imports: [
TranslateModule.forChild({
loader: {
provide: TranslateLoader, useClass: CustomLoader},
compiler: {
provide: TranslateCompiler, useClass: CustomCompiler},
parser: {
provide: TranslateParser, useClass: CustomParser},
missingTranslationHandler: {
provide: MissingTranslationHandler, useClass: CustomHandler},