我创建了一个服务,从api获取一些数据,这是代码
getChallenges(): Observable<IChallenge[]> {
if (this._challengeUrl != null) {
return this.http.get(this._challengeUrl)
.map((res:Response) => <IChallenge[]>res.json())
.do(data => console.log('data: ' + JSON.stringify(data)))
.catch(this.handleError);
} else {
//;
}
}
并且我订阅了我想在ngOnInit中使用服务的组件,一切都运行良好。
this._challengeService.getChallenges()
.subscribe(challenges => this.challenges = challenges,
error => this.errorMessage = <any>error);
但现在我需要对ngInit完成获取数据后应该运行的数据使用过滤器。这是过滤器:
filterByLvl(lvl){
this.challenges.filter((obj)=> obj.level == lvl);
}
我的问题是,当我尝试在订阅代码之后放置函数时,我一直得到一个空数组,因为ngOnInit首先运行此函数然后获取数据。我怎么能逆转这个?我需要获取数据,然后运行此功能。 所以关于如何做到这一点的任何想法?并谢谢
答案 0 :(得分:0)
一种方法是在检索数据时直接过滤:
this._challengeService.getChallenges()
.subscribe(challenges => this.challenges = challenges.filter((obj)=> obj.level == lvl),
error => this.errorMessage = <any>error);
注意 lvl将是未定义的,所以你要用逻辑来定义它
答案 1 :(得分:0)
我还没有尝试过(在工作时无法访问angular2 :-())但是你可以在$ ssh -i aws-linux-machine-yahoo.pem ec2-user@xx.xx.xx.xx
的lambda函数中有多个语句。
subscribe