Есть ли способ передать аргумент массива в канал?

#angular

#angular

Вопрос:

Есть ли какой-нибудь способ передать аргумент массива в канал?

я сделал такой код:

 <div *ngFor="let List of Lists | customPipe: [1,2,3]">
 <div>{{List.name}}</div>
</div>
  

и, похоже, не работает.

Однако, если я это сделал customPipe:[1] , он работает только с 1 значением внутри массива

Вот мой код канала:

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

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

transform(Lists: any[], args: number[]): any{

    if(!args)return petType;

    return (Lists||[]).filter(l=> l.id == args); 

  }

}
  

Ответ №1:

Итак, кажется, что вы хотите выполнить фильтрацию массива с помощью канала, показывая точные элементы, указанные в качестве аргумента канала.

Ваши аргументы представляют собой массив чисел, и вы фильтруете один раз, когда идентификатор должен равняться массиву чисел. Я думаю, что вы имеете в виду найти любой элемент с идентификатором, равным любому числу в аргументах. Для этого вы могли бы просто сделать:

 transform(Lists: any[], args: number[]): any {
  return (Lists||[]).filter(l => args.includes(l.id));
}
  

Это вернет все элементы, которые включают идентификатор, указанный в массиве args. Чтобы сделать необязательным указывать массив или просто число, вы могли бы улучшить код, чтобы он выглядел примерно так:

 transform(Lists: any[], args: number|number[]): any {
  return (Lists||[]).filter(l => {
      if(isNaN(args)){
        return args.includes(l.id);
      } else {
        return l.id === args;
      }
    });
}
  

Итак, чтобы ответить на ваш вопрос: есть ли способ передать аргумент массива в канал? Да, но ваш канал должен правильно обрабатывать массив.

Комментарии:

1. Большое вам спасибо! Это сработало, но у меня возникли некоторые проблемы. Я попытался заменить number[] на any[] , и это устранило проблему. Извините за глупый вопрос, я на самом деле новичок в angular