2016-10-12 6 views
4

Я создал три пользовательских канала для заказа данных с сервера (ASC, DESC и по умолчанию), они отлично работают, я хочу, чтобы эти три канала активно или не зависели от взаимодействия пользователя.Угловой 2: Устанавливать и удалять специальные трубы?

Вопрос в том, что можно изменить настраиваемый трубопровод с переменной, например ?.

Это мой код ...

<label *ngFor="let user of users | {{pipeOrderType}}:'name'">{{user.id}}{{user.name}}, </label> 

ответ

2

Там нет никакого способа назначить различные трубы динамически. Вы можете создать канал, который ведет себя по-разному в зависимости от параметра

@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'

+0

Спасибо за ответ! Трубы прекрасно работают: D – Danny908

+0

Рад слышать. Спасибо за ответ :) –

 Смежные вопросы

  • Нет связанных вопросов^_^