2016-06-09 106 views
0

我有一个问题,从承诺切换到Angular2中的http observable。 我有2个方法getEmployees()和getEmployee(id:number)。Angular2承诺http可观测

我能成功切换装getEmployees(),但是我得到的各种错误信息(过滤器不会对观察到的类型存在)尝试切换getEmployee的时候(ID:数)

原创 - 服务。 TS

getEmployee(id: number) { 
    return Promise.resolve(EMPLOYEES).then(
     employees => employees.filter(employee => employee.id === id)[0] 
    ); 

1日试service.ts

getEmployee(id: number) { 
     return this.http.get(employeesUrl + id).map(employee => employee.id === id)[0] 
    ); 

原创 - Component.ts

let id = +curr.getParam('id'); 
    this.employeeService.getEmployee(id).then(employee => { 
     this.employee = employee; 
    }); 

回答

2

http.get()返回可观察的Response对象。您需要从中获取数据,通常是通过调用它的方法json()。然后,你就可以将转换到你的数据 - 地图,过滤器等

getEmployee(id: number) { 
    return this.http.get(employeesUrl + id) 
    .map(response => response.json()) 
    .map(employee => employee.id === id)[0] 
); 

可观察到这种服务的回报是 - 它不会做任何事情,直到你明确地通过订阅它在你的组件问:

let id = +curr.getParam('id'); 
this.employeeService.getEmployee(id).subscribe(employee => { 
    this.employee = employee; 
}); 
+0

哦,该死的,我忘了.json部分哈哈,你是对的。 –

0

你需要返回一个可观察到订阅:

这将返回一个可观察的是将要被映射到员工ID等于传入的id。

getEmployee(id: number) { 
    return this.http.get(employeesUrl + id).map(res => res.json()).map(employee => employee.id === id); 
); 

然后,您可以订阅像这样,第一回叫认购的是nextsuccessful回调:

let id = +curr.getParam('id'); 
this.employeeService.getEmployee(id).subscribe(employees => { 
    maybe this.employee = employees[0]; 
}); 

第二个回调是error,第三回调complete

仅供参考,没有测试它,但它基本上是观察者背后的想法。

编辑:@Sasxa让我意识到我错过了一大步哈哈。