2017-08-17 85 views
0

我是TS和角4的新手。我需要能够显示角度材料2 MdSnackBar内翻译CLOSE字的用户。我明白,你可以从这样的代码中调用NGX-翻译翻译服务:ngx翻译与角材料2 MdSnackBar

this.translate.get('ERROR.CLOSE').subscribe((res: string) => { 
    console.log(res); 
}); 

的事情是,我需要能够显示这个角度材料2元中调用MdSnackBar

我想是这样执行它:

this.snackBar.open(error, this.getCloseWord(), { 
    duration: 10000, 
}) 

private getCloseWord() { 
    this.translate.get('ERROR.CLOSE').subscribe((res: string) => { 
     console.log(res); 
    }); 
    } 

但我不知道如何使getCloseWord()方法返回一个正确的字串值,可观察到的。

回答

1

尝试如下:

public someMethod() { 
    const error = ...some error...; 
    ... 
    this.translate.get('ERROR.CLOSE').subscribe((res: string) => { 
    this.snackBar.open(error, res, { duration: 10000 }); 
    }); 
    ... 
} 

的“获得()”函数返回一个可观察所以只要打开你的小吃吧当‘GET’订阅。然后你知道你的翻译是可用的。


与一个以上的观察者A的解决办法如下:

public someMethod() { 
    const newObserver = new ReplaySubject(); 
    let error = null; 
    let close = null; 

    this.translate.get('ERROR.MESSAGE').subscribe((translation: string) => { 
     error = translation; 
     newObserver.next(); 
    }); 

    this.translate.get('ERROR.CLOSE').subscribe((translation: string) => { 
     close = translation; 
     newObserver.next(); 
    }); 

    newObserver.subscribe(() => { 
     if(error && close) { 
      this.snackBar.open(error, close, { duration: 10000 }); 
     } 
    }); 
} 

还是最好的解决办法就是将它们合并:

import "rxjs/add/observable/forkJoin"; 
... 
public someMethod(){ 
    const firstTranslationObs = this.translate.get('ERROR.MESSAGE'); 
    const secondTranslationObs = this.translate.get('ERROR.CLOSE'); 

    Observable.forkJoin([firstTranslationObs, secondTranslationObs]) 
     .subscribe(results => { 
     let error= results[0]; 
     let close = results[1]; 
     this.snackBar.open(error, close, { duration: 10000 }); 
     }); 
} 
+0

谢谢!这就像一个魅力!如果我想同时翻译两个元素,该怎么办?如何调整请求以请求两个参数? –

+0

我编辑了我的答案。希望这是你的问题。 –