订阅以角度2执行代码后加载数据

时间:2017-04-13 11:30:02

标签: angular

我正在创建一个角度2的应用程序,其中我实现了多语言翻译。所以我需要做的是根据用户偏好改变语言。

以下是代码..

public trans: any;
public instant(){
var str = "Hello";
this.setLanguage("hi-IN");
return this.translate(str);
}

public setLanguage(lang: string){
this.http.get('url').subscribe((data) => {
this.trans = data;
}
}

public translate(key: string){
if(this.trans[key]){ var translated = this.trans[key];
  return translated;
 }
}

这里的情况是,如果我在构造函数中进行http调用并填充trans对象,则转换发生。但如果我按需调用它,则首先执行translate(),然后执行setLanguage(),因此失败。

1 个答案:

答案 0 :(得分:0)

您可以使用promise代替订阅,请参阅以下代码。

public setLanguage(lang: string){
   var data= this.http.get('url').map(res => res.json()).toPromise();
   promise.then(data =>this.trans = data);
   return promise
}