Как отфильтровать наблюдаемое значение в 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, карта не работает.

0 ответов

Другие вопросы по тегам