#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