2017-07-17 67 views
0

我正在学Angular,而且我对它很新。我想在视图中显示一些数据,并且数据来自服务器,我知道它是异步的,所以我一直试图在视图渲染之前使用解析来获取数据,但我无法在组件中获取它,这是我做了什么。Angular 2和Resolve路线

MateriasResolve.ts

import { Injectable } from '@angular/core'; 
import { Resolve, ActivatedRouteSnapshot } from '@angular/router'; 
import { UserService } from '../../services/user.service'; 
import 'rxjs/add/operator/first' 
import { Observable } from 'rxjs/Observable'; 
import { Materias } from './materias.model'; 

@Injectable() 
export class MateriasResolve implements Resolve<any> { 

     public user_id = localStorage.getItem('userid'); 
     public colegio = localStorage.getItem('colegio'); 

     constructor(private userService: UserService) { } 

     resolve(route: ActivatedRouteSnapshot): Observable<any> | Promise<any> | any { 
     return this.userService.getTeacherMaters(this.user_id, this.colegio).map(data => { 
    console.log(data); >>here i get the data in the console, no problem here 
}).first(); 
} 

} 

服务:

getTeacherMaters(id, colegio_code) { 
    this.auth.createAuthenticationHeaders(); 
    return this.http.get(globals.API_DOMAIN + "/materias/" + id + "/" + colegio_code, this.auth.options) 
     .map(res => res.json()); 
} 

和我的我的组件的一部分:

getMaterias() { 
this.materias = this.userService.getTeacherMaters(this.user_id, this.colegio) 
    .subscribe(data => { 
    console.log("data ------------- " + data); 
    return data.materias; 
    }); 
console.log(this.materias); 
} 

我需要把数据在materias变种,但所有我在console.log中获得的是:

Subscriber {closed: false, _parent: null, _parents: null, _subscriptions: Array(1), syncErrorValue: null…} 

回答

1

这里有一些错误。

首先,您映射的是来自getTeacherMaters的数据,但您没有返回任何数据,因此很可能在这里经过。您需要将其更新到这一点:

return this.userService.getTeacherMaters(this.user_id, this.colegio).map(data => { 
    console.log(data); >>here i get the data in the console, no problem here 
    return data; 
}).first(); 

其次,要保存的订阅的副本,但我怀疑你想要的数据保存到this.materias。因为数据请求是异步的,所以直到subscribe块内部才会获得数据,并且调用subscribe将返回可以取消的订阅。更新您的getMaterias方法是:

getMaterias() { 
    this.userService.getTeacherMaters(this.user_id, this.colegio) 
     .subscribe(data => { 
      this.materias = data; 
      console.log(this.materias); 
     }); 
} 
+0

谢谢你,是的,它是,只是一个愚蠢的错误。 –