Как отфильтровать наблюдаемое значение в Angular 2: невозможно прочитать свойство 'id' из неопределенного
Я хочу отфильтровать только ставки, которые относятся только к project.id, равному bid.project_id в angular 2, используя наблюдаемые, я хочу иметь возможность отфильтровать это перед передачей в компонент bid. Пожалуйста, помогите мне.
У меня есть bid.ts
export class Bid {
constructor(
public id?: number,
public amount?: number,
public duration?: number,
public description?: string,
public project_id?: number
) {}
}
let bid: Bid = JSON.parse('{"id": id, "amount": amount, "duration": duration, "description": description, "project_id": project_id}');
и project.ts
export class Project {
constructor(
public id?: number,
public title?: string, // name
public description?: string,
public category_id?: number,
public budget_id?: number
) {}
}
// bid.service.ts
import { Injectable } from '@angular/core';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Observable'; //Rx
import { Bid } from './bid';
import { Project } from '../projects/project';
@Injectable()
export class BidService {
bid: Bid
project: Project
private bidsUrl = 'http://localhost:3005/bids.json';
constructor(
private http: Http
){}
getBids(): Observable<Bid[]> {
return this.http.get(this.bidsUrl)
.map((response: Response) => <Bid[]>response.json())
.map(bids => {
return bids.filter(bid => bid.project_id === this.project.id)
})
.catch(this.handleError)
}
в компоненте списка заявок у меня тоже есть
import { Component, OnInit, Input } from '@angular/core';
import { ActivatedRoute, Params } from '@angular/router';
import { Http, Response, Headers, RequestOptions } from '@angular/http';
import { Observable } from 'rxjs/Rx';
import { Bid } from './bid';
import { BidService } from './bid.service';
@Component({
moduleId: module.id,
selector: 'bid-list',
templateUrl: 'bid-list.component.html',
providers: [ BidService ]
})
export class BidListComponent implements OnInit {
bids: Bid[];
errorMessage: string;
mode = "Observable";
constructor(
// Dependency Injection
private bidService: BidService,
) {}
ngOnInit() {
let timer = Observable.timer(0, 5000);
timer.subscribe(() => this.getBids());
}
getBids() {
this.bidService.getBids()
.subscribe(
bids => this.bids = bids,
error => this.errorMessage = <any>error
);
}
}
Как можно отобразить только те ставки, которые относятся к проекту?
Моя проблема заключается в том, что Bid Object для проекта с идентификатором 1 отображается в проекте с идентификатором 2, карта не работает.