Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
源参数Angular 8 Pipe上始终未定义的嵌套NGF中的过滤器_Angular_Filter - Fatal编程技术网

源参数Angular 8 Pipe上始终未定义的嵌套NGF中的过滤器

源参数Angular 8 Pipe上始终未定义的嵌套NGF中的过滤器,angular,filter,Angular,Filter,我用的是角度8 我有一个过滤器,让我给它的源参数的值未定义,我不明白为什么,因为我总是可以可视化过滤器认为未定义的元素。 我有以下过滤器: filter(source :string, target :string, method:Method) : boolean { console.log("filter"); console.log(source, target, method); switch(method) { case "includes" :

我用的是角度8

我有一个过滤器,让我给它的源参数的值未定义,我不明白为什么,因为我总是可以可视化过滤器认为未定义的元素。 我有以下过滤器:

filter(source :string, target :string, method:Method) : boolean {
    console.log("filter");
    console.log(source, target, method);
    switch(method) {

      case "includes" : return source.includes(target)
      case "equal"  : return source === target
      case "not-equal" : return source !== target
    }

  }

}

type Method ="includes" | "equal" | "not-equal"
下面是html,如果我根本不应用过滤器,我可以很好地看到所有元素:

  <div *ngFor="let cat of filteredArray | filter : 'cat.category' : selectedCategory : 'equal'" >
          <mat-tab *ngFor="let errlist of cat.errors" label="{{errlist.letter}}">
              <div class="tab-content ">
                  <ul class="errorUL ">
                    <li *ngFor="let item of errlist.errorList  " >
                         {{item.id}} - {{item.description}}
                     </li>
                    </ul>
              </div>

    {{item.id}-{{item.description}

那么我在这里遗漏了什么?这不是过滤器的工作方式吗?

过滤器的声明看起来非常混乱。我想您使用的是Angular和typescript,而不是AngularJs,因此您必须使用管道而不是过滤器

如果您仍然使用AngularJS和过滤器,那么您的过滤器声明和使用在很多方面都是错误的。请看一看。简言之:

  • 您不会使用类似于
    过滤器:“类别”这样的过滤器
    。正如我所记得的,您使用声明此筛选器的关键字。不幸的是,我没有看到像
    app.filter('makeUppercase',function(){
    这样的声明,您可以在教程中找到
  • AngularJS方法属性中没有类型
  • 你必须告诉AngularJS你想要到达这个过滤器的名字
  • 我看不出
    selectedCategory
    属性应该从哪里获得它们的值

在管道中,我觉得您正在将对象数组作为字符串处理,然后返回单个字符串,而不是经过过滤的对象数组

无论如何,这里有一个我正在使用的过滤管的例子

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
    name: 'filter',
    pure: false
})
export class FilterPipe implements PipeTransform {

    transform(items: any, property: any, term: any): any {
        if (!term) {
            return items;
        }

        const result = items.filter(function (item) {

            if (item[property] === null) {
                return items;
            }
            if (item[property].toString().toLowerCase().includes(term.toLowerCase())) {
                return true;
            }
            return false;
        });
        if (result.length === 0) {
            return [-1];
        }
        return result;
    }
}

我写错了,用cat.category而不是category

这是正确的方法:

 <div *ngFor="let cat  of filteredArray  | filter : 'category' : selectedCategory : 'equal'">

我使用的是带有自定义管道的angular 8是