ERROR: Can't resolve all parameters for CustomTranslateLoader ... json import problem?
ERROR: Can't resolve all parameters for CustomTranslateLoader ... json import problem?
我正在使用 translate,我不得不编写自己的加载器,因为默认加载器是基于 httpClient 的。我的解决方案有效,项目启动并且语言发生变化。所以一切都很好。不幸的是,当我尝试构建 ng build my-lib --prod
时出现错误。我想这与 json 有关? (Angular 9).
自定义-loader.ts
import { TranslateLoader } from '@ngx-translate/core';
import { Observable, of } from 'rxjs';
import * as en from '../../../lib-assets/i18n/en.json';
import * as pl from '../../../lib-assets/i18n/pl.json';
export class CustomTranslateLoader implements TranslateLoader {
constructor(private availableLang: any = { en, pl }) {}
getTranslation(lang: string): Observable<any> {
return of(this.availableLang[lang].default);
}
}
tsconfig.json
"resolveJsonModule": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
错误 ng build my-lib --prod
:
ERROR: Can't resolve all parameters for CustomTranslateLoader in /Projects/my-app/projects/my-lib/src/lib/core/translate/custom-loader.ts: (?).
An unhandled exception occurred: Can't resolve all parameters for CustomTranslateLoader in /Projects/my-app/projects/my-lib/src/lib/core/translate/custom-loader.ts: (?).
您是否在 app.module.ts
中执行了以下代码
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: CustomTranslateLoader
}
})
我猜是因为这个原因:
构造函数(私有可用语言:any = { en, pl }){}
如果你想提供 availableLang = { en, pl } 那么在 OnInit() 生命周期挂钩中初始化它是一个更好的地方。
我们主要使用构造函数来进行依赖注入。尝试实施此更改。
正如 Adya 指出的那样,这是因为参数 avilableLang 的初始化。
export class CustomTranslateLoader implements TranslateLoader {
// original code doesn't have key in the object. you must have key in the object as shown below
private availableLang: any = { en: en, pl: pl };
constructor() {}
getTranslation(lang: string): Observable<any> {
return of(this.availableLang[lang].default);
}
}
我正在使用 translate,我不得不编写自己的加载器,因为默认加载器是基于 httpClient 的。我的解决方案有效,项目启动并且语言发生变化。所以一切都很好。不幸的是,当我尝试构建 ng build my-lib --prod
时出现错误。我想这与 json 有关? (Angular 9).
自定义-loader.ts
import { TranslateLoader } from '@ngx-translate/core';
import { Observable, of } from 'rxjs';
import * as en from '../../../lib-assets/i18n/en.json';
import * as pl from '../../../lib-assets/i18n/pl.json';
export class CustomTranslateLoader implements TranslateLoader {
constructor(private availableLang: any = { en, pl }) {}
getTranslation(lang: string): Observable<any> {
return of(this.availableLang[lang].default);
}
}
tsconfig.json
"resolveJsonModule": true,
"esModuleInterop": true,
"allowSyntheticDefaultImports": true,
错误 ng build my-lib --prod
:
ERROR: Can't resolve all parameters for CustomTranslateLoader in /Projects/my-app/projects/my-lib/src/lib/core/translate/custom-loader.ts: (?).
An unhandled exception occurred: Can't resolve all parameters for CustomTranslateLoader in /Projects/my-app/projects/my-lib/src/lib/core/translate/custom-loader.ts: (?).
您是否在 app.module.ts
中执行了以下代码 TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useClass: CustomTranslateLoader
}
})
我猜是因为这个原因: 构造函数(私有可用语言:any = { en, pl }){}
如果你想提供 availableLang = { en, pl } 那么在 OnInit() 生命周期挂钩中初始化它是一个更好的地方。 我们主要使用构造函数来进行依赖注入。尝试实施此更改。
正如 Adya 指出的那样,这是因为参数 avilableLang 的初始化。
export class CustomTranslateLoader implements TranslateLoader {
// original code doesn't have key in the object. you must have key in the object as shown below
private availableLang: any = { en: en, pl: pl };
constructor() {}
getTranslation(lang: string): Observable<any> {
return of(this.availableLang[lang].default);
}
}