Там нет никакого способа назначить различные трубы динамически. Вы можете создать канал, который ведет себя по-разному в зависимости от параметра
@Pipe({
name: 'dynamicPipe'
})
class DynamicPipe implements PipeTransform {
transform(value, pipe) {
if(!value || !pipe) {
return null;
}
return pipe.transform(value);
}
}
Где труба может быть использована как
<label *ngFor="let user of users | dynamicPipe:pipe">{{user.id}}{{user.name}}, </label>
а здесь pipe
является ссылка на текущий экземпляр класса трубы, не строка. Вы можете вводить трубы для компонента, как
class MyComponent {
constructor(private pipe1:Pipe1, private pipe2:Pipe2) {}
clickHandler() {
if(xxx) {
this.pipe = this.pipe1;
} else {
this.pipe = this.pipe2
}
}
}
Вы также можете вводить трубы в dynamicPipe
@Pipe({
name: 'dynamicPipe'
})
class DynamicPipe implements PipeTransform {
constructor(private pipe1:Pipe1, private pipe2:Pipe2) {}
transform(value, pipe) {
if(!value || !pipe) {
return null;
}
if(pipe == 'pipe1') {
return pipe1.transform(value);
}
if(pipe == 'pipe2') {
return pipe2.transform(value);
}
}
}
, а затем использовать его с именем трубы
<label *ngFor="let user of users | dynamicPipe:pipe">{{user.id}}{{user.name}}, </label>
Где pipe
является 'pipe1'
или 'pipe2'
Спасибо за ответ! Трубы прекрасно работают: D – Danny908
Рад слышать. Спасибо за ответ :) –