Angular2管道动态值不带

时间:2017-07-12 07:51:19

标签: javascript angular typescript ionic-framework ionic2

我有像这样的json

[{
  "id": 9156,
  "slug": "chicken-seekh-wrap",
  "type": "dish",
  "title": "Chicken Seekh Wrap",
  "cuisine_type": [2140]
},
{
  "id": 9150,
  "slug": "green-salad",
  "type": "dish",
  "title": "Green Salad",
  "cuisine_type": [2141]
}]

我创建了一个像这样的管道来过滤angular2中的美食类型

@Pipe({
      name: 'filter',
      pure: false
 })
 export class FilterPipe implements PipeTransform {
     transform(items: any[], selectedId: any): any {
     if(selectedId === -1)
           return items;
    return items.filter(item => item.cuisine_type[0] === selectedId);

  }
 }

在离子视图中,我像这样使用它

<ion-card *ngFor="let cat of selectedCats">
            <ion-card-header>
              {{cat}}
            </ion-card-header>
            <ion-card-content>
                <ion-list class="checkbox-list" *ngIf="dishes ?.length > 0">
                  <ion-item class="checkbox-item" *ngFor="let dish of dishes | filter:cat">

                    <ion-label>{{dish.title}}</ion-label>
                      <ion-checkbox [formControlName]="dish.id"></ion-checkbox>

                  </ion-item>
                </ion-list>
            </ion-card-content>
</ion-card>

当我使用管道值作为静态工作

 <ion-item class="checkbox-item" *ngFor="let dish of dishes | filter:2140">

但是当我动态使用它时,它没有显示任何结果

<ion-item class="checkbox-item" *ngFor="let dish of dishes | filter:cat">

1 个答案:

答案 0 :(得分:1)

问题不是由Angular引起的,而是由您的代码引起的

item.cuisine_type[0] === selectedId

对接受的价值过于具体

item.cuisine_type[0] == selectedId 
在比较之前允许类型强制,

更宽容。

这意味着,cat可能是字符串'2140'item.cuisine_type[0]一个数字。 如果您将其作为| filter:2140"传递,则会将其作为号码传递并与item.cuisine_type[0]匹配。