Angular NGO模块的提供程序无效。仅允许提供程序和类型的实例,得到:[?[object]?,…]
在我的应用程序中,我想为语言引入国际化。所以我有两个带翻译的文件“.json”。 我有一个错误: NgModule“TranslateModule”的提供程序无效-仅允许提供程序和类型的实例,获取:[?[object]?,…] 我看不出我做错了什么。这是app.module.tsAngular NGO模块的提供程序无效。仅允许提供程序和类型的实例,得到:[?[object]?,…],angular,Angular,在我的应用程序中,我想为语言引入国际化。所以我有两个带翻译的文件“.json”。 我有一个错误: NgModule“TranslateModule”的提供程序无效-仅允许提供程序和类型的实例,获取:[?[object]?,…] 我看不出我做错了什么。这是app.module.ts import {BrowserModule} from '@angular/platform-browser'; import {NgModule} from '@angular/core'; import {Tran
import {BrowserModule} from '@angular/platform-browser';
import {NgModule} from '@angular/core';
import {TranslateModule} from 'ng2-translate';
import {AppComponent} from './app.component';
import {NavbarComponent} from './components/navbar/navbar.component';
import {RouterModule} from '@angular/router';
import {appRoutes} from './app.route';
import {DoctorsComponent} from './pages/doctors/doctors.component';
import {HomeComponent} from './pages/home/home.component';
import {HospitalsComponent} from './pages/hospitals/hospitals.component';
import {HttpClientModule} from '@angular/common/http';
import {FormsModule} from '@angular/forms';
import {translateFactory} from './TranslateFactory.component';
import {TranslateLoader} from '@ngx-translate/core';
@NgModule({
declarations: [
AppComponent,
NavbarComponent,
HomeComponent,
DoctorsComponent,
HospitalsComponent
],
imports: [
BrowserModule,
HttpClientModule,
FormsModule,
RouterModule.forRoot(
appRoutes,
{enableTracing: false}
),
TranslateModule.forRoot({
loader: {
provider: TranslateLoader,
useClass: (translateFactory)
}
})
],
providers: [],
bootstrap: [AppComponent]
})
export class AppModule { }
这是TranslateFactory.component.ts
import * as enTranslate from '../i18n/en.json';
import * as roTranslate from '../i18n/ro.json';
import { of, Observable } from 'rxjs';
import { TranslateLoader as NgxTranslateLoader } from '@ngx-translate/core';
const TRANSLATIONS = {
en: enTranslate,
ro: roTranslate
};
export class TranslateLoader implements NgxTranslateLoader {
public getTranslation(lang: string): Observable<any> {
return of(TRANSLATIONS[lang]);
}
}
export function translateFactory() {
return new TranslateLoader();
}
您能提出一些解决方案或告诉我我做错了什么吗?TranslateModule.forRoot({
加载器:{
提供者:TranslateLoader,
useClass:(translateFactory)
}
})
使用useFactory
而不是useClass
。
使用
提供
而不是提供程序
从'ng2 translate'导入{TranslateModule};
使用
@ngx translate/core
而不是ng2 translate
我找到了另一种可行的方法
从@ngx translate/core导入TranslateService和TranslateModule代码>
在app.module.ts中使用HttpLoaderFactory和TranslateLoader:
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
useFactory: HttpLoaderFactory,
deps: [HttpClient ]
}
})
export function HttpLoaderFactory(http: HttpClient) {
return new TranslateHttpLoader(http);
}
确保“.json”文件位于/assets/i18n中。这是获取用于翻译的json的默认文件夹。请尝试以下操作:
TranslateModule.forRoot({
loader: {
provide: TranslateLoader,
// useFactory: createTranslateLoader,
useClass: CustomI18nLoader, //custom class
deps: [HttpClient],
},
}),
//自定义类如下:
class CustomLoader implements TranslateLoader {
constructor(private http: HttpClient) { }
getTranslation(lang: string): Observable<any> {
return this.http.get(`./assets/i18n/${lang}.json`);
}
}
类CustomLoader实现TranslateLoader{
构造函数(私有http:HttpClient){}
getTranslation(lang:string):可观察{
返回这个.http.get(`./assets/i18n/${lang}.json`);
}
}
另一个错误,我认为ng2 translate是正确的。错误:类型“{provider:typeof TranslateLoader;useFactory:()=>TranslateLoader;}”不可分配给类型“provider”。对象文字只能指定已知属性,并且类型“provider”中不存在“provider”。
使用提供而不是提供。很久以前,ng2-translate
的名字改为@ngx-translate
。在使用…
部分,要么使用useClass:TranslateLoader
要么使用useFactory:translateFactory
。我两种方法都试过了。但是有同样的问题。我将项目从角度9更新到了角度10,也更新到了角度11,但仍停留在这一点上。错误:NgModule“AppModule”的提供程序无效-仅允许提供程序和类型的实例,获取:[……,…,…,…,,…,,,,,,,,,…]
class CustomLoader implements TranslateLoader {
constructor(private http: HttpClient) { }
getTranslation(lang: string): Observable<any> {
return this.http.get(`./assets/i18n/${lang}.json`);
}
}