Ionic 2 RC0 和 Angular 2 最新的 Build android 错误(ngc:错误:遇到静态解析符号值的错误)

Posted

技术标签:

【中文标题】Ionic 2 RC0 和 Angular 2 最新的 Build android 错误(ngc:错误:遇到静态解析符号值的错误)【英文标题】:Ionic 2 RC0 And Angular 2 latest Error on Build android (ngc: Error: Error encountered resolving symbol values statically) 【发布时间】:2017-02-21 09:53:33 【问题描述】:

使用ionic build android 命令构建android 时出现错误

ngc:错误:静态解析符号值时遇到错误。对本地(非导出)符号“字典”的引用。考虑导出符号(原始 .ts 文件中的位置 14:8),解析符号 TRANSLATION_PROVIDERS

translation.ts 文件中的代码

export const TRANSLATIONS = new OpaqueToken('translations');
// all traslations
 const dictionary : any = 
    [LANG_EN_NAME]: LANG_EN_TRANS,
    [LANG_AR_NAME]: LANG_AR_TRANS,
    [LANG_FR_NAME]: LANG_FR_TRANS
;
// providers
export const TRANSLATION_PROVIDERS : any = [
     provide: TRANSLATIONS, useValue: dictionary,
];

我的 app.module.ts 代码

import TRANSLATION_PROVIDERS,TranslatePipe,TranslateService from './translate';

@NgModule(
  declarations: [
    MyApp,
  ],
  imports: [
    BrowserModule,
    IonicModule.forRoot(MyApp)
  ],
  bootstrap: [IonicApp],
  entryComponents: [
    MyApp,

  ],
  providers: [TRANSLATION_PROVIDERS,TranslateService ]
)
export class AppModule 

关于这个问题的任何建议,顺便说一下,当我使用 ionic serve 命令时,我的项目通过转换 100% 工作

【问题讨论】:

你能创建一个最小的 git repo 吗? 【参考方案1】:

我找到了解决方法。

您不必导出字典对象,只需将键更改为静态值。

这对我有用:

// all translations
const dictionary = 
  "en": LANG_EN_TRANS,
  "ar": LANG_AR_TRANS,
  "fr": LANG_FR_TRANS
;
// providers
export const TRANSLATION_PROVIDERS = [
   provide: TRANSLATIONS, useValue: dictionary ,
];

【讨论】:

【参考方案2】:

是的,正如@welefish 在他的回答中所说,无需导出您的字典对象,您只需将键更改为静态值。

PS:- 另一种方法(作为答案发布,因为@welefish 方法不适合我)

let en = LANG_EN_NAME;
let er = LANG_AR_NAME;
let fr = LANG_FR_NAME;

const dictionary : any = 
    en: LANG_EN_TRANS,
    er: LANG_AR_TRANS,
    fr: LANG_FR_TRANS
;

// providers
export const TRANSLATION_PROVIDERS = [
   provide: TRANSLATIONS, useValue: dictionary ,
];

【讨论】:

【参考方案3】:

好吧,按照编译器说的做 :)。导出您的字典:

export const dictionary : any = 
    [LANG_EN_NAME]: LANG_EN_TRANS,
    [LANG_AR_NAME]: LANG_AR_TRANS,
    [LANG_FR_NAME]: LANG_FR_TRANS
;

【讨论】:

首先感谢您的回答@PierreDuc,出现错误ngc: Error: Error encountered resolving symbol values statically. Expression form not supported (position 15:5 in the original .ts file), resolving symbol dictionary in D:/Mle/.tmp/app/translate/translations.ts, resolving symbol TRANSLATION_PROVIDERS in D:/Mle/.tmp/app/translate/translations.ts, resolving symbol AppModule in D:/Mle/.tmp/app/app.module.ts, resolving symbol AppModule in D:/Mle/.tmp/app/app.module.ts @OscarBout 你有什么问题? 和@PAncho一模一样:我把原来的:scotch.io/tutorials/…改成了你的解决方案,得到了同样的错误【参考方案4】:

声明 [LANG_EN_NAME] 的类型:

export const LANG_EN_NAME : string = 'en';

为我工作。

【讨论】:

以上是关于Ionic 2 RC0 和 Angular 2 最新的 Build android 错误(ngc:错误:遇到静态解析符号值的错误)的主要内容,如果未能解决你的问题,请参考以下文章

用于浏览器和移动设备的 Ionic 2 Storage

ionic 2 angular 2 从 ion-select 中获取值以发送 http post

使用 ionic 2 和 angular 2 创建菜单

带有 Ionic 2 Angular 2 和 TypeScript 的 OpenPGP

ionic 2 + angular 2 - 选项卡 + 侧边菜单

在 Angular 2、Ionic 2 中返回一个承诺值