我如何在Angular2中只显示card.column值与column.id匹配的结果?

20 浏览
0 Comments

我如何在Angular2中只显示card.column值与column.id匹配的结果?

我有以下代码,并且它运行良好,它的作用是使用ngFor重复创建每个列对象的列。

目前它在每个列中显示来自卡片对象的每张卡片。

我想要的是只在column.id = card.column的列中显示卡片。

我该如何修改我的代码来实现这个目标?

import {Input, Output, EventEmitter, Component, Injectable} from 'angular2/core'
  import {NgFor} from 'angular2/common'
  import {Observable} from 'rxjs/Observable';
  interface Card {
    id?: number;
    title?: string;
    column?: number;
  }
  @Injectable()
  export class DataService {
    cards$: Observable>;
    private _cardsObserver: any;
    private _dataStore: Array;
    constructor(){
      this._dataStore = [
        {id: 1, title: 'Card A', column: 1},
        {id: 2, title: 'Card B', column: 2},
        {id: 3, title: 'Card C', column: 2}
      ];
      this.cards$ = new Observable(observer =>
        this._cardsObserver = observer).share();
    }
    loadCards() {
      this._cardsObserver.next(this._dataStore);
    }
    addCard(){
      this._dataStore.push({id: 4, title: 'Card D', column: 3});
      this._cardsObserver.next(this._dataStore);
    }
    getColumns(){
      var columns = [
        {id: 1, title: 'Column One'},
        {id: 2, title: 'Column Two'},
        {id: 3, title: 'Column Three'}
      ];
      return columns;
    }
  }
  @Component({
    selector: 'app',
    providers: [DataService],
    directives: [],
    template: `
    
      {{c.title}}
      {{card.title}}
    `
  })
  export class App {
    private cards: Array;
    private columns: any;
    constructor(public dataService: DataService) {
      dataService.cards$.subscribe(updatedCards => this.cards = updatedCards);
      dataService.loadCards();
      this.columns = dataService.getColumns();
    }
  }

0
0 Comments

问题的原因是,希望只显示那些卡片的结果,其中卡片的列值与列的ID匹配。解决方法是创建一个自定义管道来过滤卡片。首先,在Angular2中创建一个名为CardFilterPipe的管道类,然后在transform方法中使用filter函数来过滤卡片。然后,在HTML中使用管道来过滤卡片,将过滤条件设置为列的ID。如果想要考虑更新,需要将管道的pure属性设置为false。另外,可以通过启用生产模式来解决在开发模式下出现的错误消息。最后,还提到了一些关于在开发模式和生产模式下使用有状态管道的注意事项。

0