фильтр во вложенном ng для всегда неопределенного по исходному параметру Angular 8 Pipe - PullRequest
1 голос
/ 11 июля 2019

Я использую Angular 8.

У меня есть фильтр, который заставляет меня указывать значение undefined для его параметра источника, и я не понимаю, почему, поскольку я всегда могу визуализировать элемент, который фильтр считает неопределенным.У меня есть следующий фильтр:

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>

так что яздесь не хватает?разве фильтр не работает?

Ответы [ 3 ]

1 голос
/ 11 июля 2019

в вашем канале. Мне кажется, что вы обрабатываете массив объектов как string , а затем возвращаете одну строку, а не фильтрованный массив объектов.

в любом случае, вот пример фильтрующей трубы, которую я использую

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;
    }
}
0 голосов
/ 11 июля 2019

Я написал неправильно, с cat.category вместо просто категории

это правильный путь:

 <div *ngFor="let cat  of filteredArray  | filter : 'category' : selectedCategory : 'equal'">
0 голосов
/ 11 июля 2019

Объявление вашего фильтра выглядит очень запутанным.Я предполагаю, что вы используете Angular с машинописью, а не AngularJ, поэтому вы должны использовать Pipes вместо фильтров. Вот официальное руководство по этому вопросу .

Если вы по-прежнему используете AngularJS и фильтры, ваше объявление фильтра и его использование во многих случаях неверны.Пожалуйста, взгляните на этот урок .Короче говоря:

  • Вы не используете фильтр как filter : 'category'.Насколько я помню, вы используете ключевое слово, которому вы объявили этот фильтр.К сожалению, я не вижу ни одного объявления, подобного app.filter('makeUppercase', function () {, которое вы можете найти в руководстве.
  • У вас нет типов в свойствах метода AngularJS.
  • Вы должны сообщить AngularJS имя, которое хотите использовать для этого фильтра.
  • Я не вижу откудасвойства source и selectedCategory должны получить свои значения?
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...