【问题标题】:Ionic3 lazy loading and translate don't work togetherIonic3 延迟加载和翻译不能一起工作
【发布时间】:2017-11-17 09:26:14
【问题描述】:

最近我升级了 Ionic,现在升级了 Ionic3

现在当前的应用程序不能完全使用 Ionic 和 ng2-translate。

之前相同的代码在没有延迟加载的情况下运行良好,但我们需要使用延迟加载来改善应用程序加载时间并减少启动显示的持续时间。

app.module.ts 导入组件的样子

TranslateModule.forRoot({
provide: TranslateLoader,
useClass: TMATranslationLoader
})

TMATranslationLoader 看起来像

export class TMATranslationLoader implements TranslateLoader {
  constructor(  ) { }

  getTranslation(lang: string): Observable<any> {
    switch(lang) {
      case 'nl':
        return Observable.of(translations_nl);
      case 'hi':
        return Observable.of(translations_hi);
      // case 'de':
      //   return Observable.of(translations_de);
      // case 'fr':
      //   return Observable.of(translations_fr);
      // case 'es':
      //   return Observable.of(translations_es);
      default:
        return Observable.of(translations_en);
    }
  }
}

app.component.ts 看起来像

this.rootPage = 'LoginPage';

login-page.html 看起来像

<ion-label floating>{{ 'LBL_USERNAME' | translate }}</ion-label>

出现的运行时异常

Error: Uncaught (in promise): Error: Template parse errors:
The pipe 'translate' could not be found (" <ion-list>
<ion-item class="icon-user">
<ion-label floating>{{ [ERROR ->]'LBL_USERNAME' | translate }}</ion-label>

有什么想法吗?我是不是做错了什么?

【问题讨论】:

    标签: angular typescript ionic-framework ionic2 ionic3


    【解决方案1】:

    由于延迟加载页面包含它们自己的模块,现在您需要在每个延迟加载页面的模块中导入翻译模块。

    请查看ionic docs related to this。如您所见,使用 ngx-translate 的步骤如下:

    1) 正在安装

    安装 ngx-translate 运行

    npm install @ngx-translate/core @ngx-translate/http-loader --save.
    

    2) 引导

    要使用 ngx-translate,必须先将其导入并添加到应用程序的 NgModule 中的 imports 数组

    import { TranslateModule, TranslateLoader } from '@ngx-translate/core';
    import { TranslateHttpLoader } from '@ngx-translate/http-loader';
    import { Http } from '@angular/http';
    ...
    
    export function createTranslateLoader(http: Http) {
      return new TranslateHttpLoader(http, './assets/i18n/', '.json');
    }
    
    @NgModule({
      imports: [
        TranslateModule.forRoot({
          loader: {
            provide: TranslateLoader,
            useFactory: (createTranslateLoader),
            deps: [Http]
          }
        })
      ]
    })
    

    3) 延迟加载页面

    如果您想将 Ionics 延迟加载页面与 ngx-translate 一起使用,您必须配置您的 component.module.ts 文件

    import { NgModule } from '@angular/core';
    import { IonicPageModule } from 'ionic-angular';
    import { TranslateModule } from '@ngx-translate/core';
    import { HelloPage } from './hello-page';
    
    @NgModule({
      declarations: [
        HelloPage,
      ],
      imports: [
        IonicPageModule.forChild(HelloPage),
        TranslateModule.forChild()
      ],
      exports: [
        HelloPage
      ]
    })
    export class HelloPageModule {}
    

    【讨论】:

    • 有什么方法可以使用 ng2-translate 和延迟加载。 ngx-translate 效果很好。否则,我需要将 ng2-translate 更新为 ngx-translate。
    • 我不确定,因为我开始直接使用ngx-translate,很抱歉.. 但很高兴看到它仍然有帮助:)
    • 我成功地将 ng2-translate 更新为 ngx-translate。唯一的区别(对于方法)是 ng2-translate 在 TranslateModule 中没有 forChild()。它只有forRoot()。在 ngx-translate 中同时具有 forRoot() 和 forChild()。感谢您的支持。
    • Np,很高兴听到该解决方案对您有用 :)
    • 我收到此错误:Could not find IonicModule.forRoot call in "imports"。我需要保留forRootforChild 吗?这在文档中不清楚
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-22
    • 1970-01-01
    • 2017-11-03
    相关资源
    最近更新 更多