У меня есть несколько разных каналов, которые я хотел бы включать и выключать, если пользователь хочет фильтровать свои данные по различным критериям. Как мне активировать/деактивировать каналы, используемые в настоящее время в поиске, или создать один канал, который ведет себя по-разному в зависимости от того, на какие кнопки нажал пользователь?
Например, две трубы/фильтра будут выглядеть так...
//cloud.pipe.ts
import {Pipe} from '@angular/core';
import {Hero} from './hero';
@Pipe({
name: 'Cloud'
})
export class CloudPipe{
transform(value) {
if (value == null) {
return null;
}
return value.filter(hero => {
return hero.cloud === true;
});
}
}
//location.pipe.ts
import {Pipe} from '@angular/core';
import {Hero} from './hero';
import { HeroService } from './hero.service';
import { HeroesComponent } from './heroes.component';
@Pipe({
name: 'Location'
})
export class LocationPipe{
transform(value) {
if (value == null) {
return null;
}
return value.filter(hero => {
return hero.location < 500;
});
}
}
Затем я хотел бы, чтобы пользователь переключал разные кнопки фильтра и добавлял/удалял каналы в список. Каков наилучший подход для чего-то подобного?
<!--Toggle what pipes should be used in search-->
<!--For example how can I construct the "updatePipe" function for doing this?-->
<button id="activateCloud" (click)="updatePipe()"></button>
<button id="activateLocation" (click)="updatePipe()"></button>
<!--Is it possible to have: neither of the pipes active, both at the same time or just one at the time? How can I do this?-->
<div *ngFor="let hero of heroes | Cloud | Location ></div>
Я бы не хотел, чтобы все было в одной трубе, поскольку я хотел бы расширить каждую трубу, чтобы делать больше в будущем. Таким образом, каждая труба должна быть «своей» и работать независимо друг от друга, но в то же время работать в связке с другими трубами, когда это необходимо.