Angular 2回调

时间:2016-06-06 01:12:39

标签: javascript angular

我创建了一个服务,从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首先运行此函数然后获取数据。我怎么能逆转这个?我需要获取数据,然后运行此功能。 所以关于如何做到这一点的任何想法?并谢谢

2 个答案:

答案 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