angular 2 ng2-translate自定义TranslateLoader无法使用API

时间:2017-03-28 04:26:08

标签: angular ng2-translate

从API获取数据时,

ng2-translate无法使用自定义TranslateLoader。以下是我的自定义TranslateLoader

translateCustomLoader.ts

@Injectable()
export class CustomTranslateLoader implements TranslateLoader  {

    constructor(private http: Http, private apiService: AuthHttp) { console.log("customer loader initialized"); }

    getTranslation(lang: string): Observable<any>{
        var apiAddress = "http://test.com/api/gettranslationsfromDB?culture=" + lang;

        return this.apiService.get(apiAddress).map((res) => res.json());

        //return Observable.of({ "hello": "translatedhello","welcome":"translatedwelcome"});
    }
}

API的响应是

{ "hello": "translatedhello","welcome":"translatedwelcome"}

app.module.ts

中向提供商添加了TranslateLoader
providers: [CustomTranslateLoader, { provide: TranslateLoader, useClass: CustomTranslateLoader}]

在我的HTML页面中,我有

<h4>{{ 'hello' | translate }}</h4>

我仍然看到hello被渲染。如果我替换

,这样可以正常工作
return this.apiService.get(apiAddress).map((res) => res.json());

return Observable.of({ "hello": "translatedhello","welcome":"translatedwelcome"});

所以我很确定配置没有任何问题。我在这里缺少什么?

1 个答案:

答案 0 :(得分:2)

我通过更改下面的getTranslation来实现它的工作

getTranslation(lang: string): Observable<any> {
    var apiAddress = "http://test.com/api/gettranslationsfromDB?culture=" + lang;
    return Observable.create(observer => {
            this.authService.get(apiAddress)
                .subscribe((res: Response) => {
                    observer.next(JSON.parse(res.json()));
                    observer.complete();               
                });
        });

    }

虽然对我没有多大意义。希望这有助于某人。