1

我有以下 JSON 对象: http: //pastebin.com/1TguvZXc

这是我的模型组件 HTML:

<button *ngFor="let category of categories"    (click)="chooseCategory(this.category)" type="button" name="button" class="btn btn-default" id="{{category}}">
  {{category}}
</button>  
<div *ngFor="let model of models?.models">
  <div *ngFor="let year of model['years']">
    <div *ngFor="let style of year['styles'] | chooseCategory">
        {{model.name}}, {{style.submodel.body }}
   </div>
 </div>

我的 models.component 中的(管道?)方法:

chooseCategory(selectedCategory: string): void {
    if((selectedCategory === '')) {
      this.filterByPipe.transform(this.models,
                     ['models.years.styles.submodel.body'], selectedCategory);
    }
 }

此外,我想使用FilterByPipe管道 fromngx-pipes按类别过滤掉models.years.styles.submodel.body.

我的 HTML 中的代码产生以下错误:

Unhandled Promise rejection: Template parse errors:
The pipe 'chooseCategory' could not be found ("or="let model of models?.models">
  <div *ngFor="let year of model['years']">
    <div *ngFor="let s[ERROR ->]tyle of year['styles'] | chooseCategory">
        {{model.name}}, {{style.submodel.body }}
4

2 回答 2

1

由于您正在导入pipe并从 中的按钮调用它component,因此您无需直接在component. 此外,chooseCategory只是一个method,而不是一个pipe。然后,pipe从以下行中删除:

<div *ngFor="let style of year['styles'] | chooseCategory">
于 2017-02-09T19:35:18.083 回答
1

我认为您甚至没有阅读文档。Yu 应该以这种方式创建管道:

@Pipe({
    name: 'somePipe'
})
export class SomePipe {

   transform(value: any[]): any[] {
      //some transform code...
   }
}

然后你能不能用这种方式在 HTML 文件中调用它:

<div *ngFor="let elem of elements | somePipe"></div>

不要忘记在模块中声明你的管道。

@NgModule({
   declarations: [ SomePipe ]
})

那就是您使用的是一种方法,而不是管道。

如果要执行管道依赖于(fe)按钮单击,您应该使用参数构建管道:

   @Pipe({
      name: 'somePipe'
   })
   export class SomePipe {
      transform(value: any[], args: any[]): any[] {
         let someFlag: boolean = false;
         if(args && args[0]) someflag = true;
         if(someflag) {
            //some transform code...
         }
      }
   }

以这种方式调用此管道

<div *ngFor="let elem of elements | somePipe : yesOrNo"></div>

然后你可以在你的组件方法中使用点击按钮吗

yesOrNo: boolean = false;

onClickButton(event: any) {
   event.preventDefault();
   yesOrNo = !yesOrNo;
}
于 2017-02-09T19:39:08.537 回答