2016-03-08 7 views
2

У меня есть простой атрибут директивы mask, с @Input() mask:stringAngular2 - Обнаружение изменения атрибута @Input

Я хочу, чтобы иметь возможность обнаруживать и реагировать на изменения на mask связывания я могу использовать ngOnChanges так или иначе, но я чувствую, что это как живопись проблема с большой кистью

Sample/упрощенный код директивы:

@Directive({ 
    selector: 'mask' 
}) 
export class MaskDirective implements AfterViewInit { 
    @Input() mask: string; 

    constructor(public el: ElementRef) {}; 

    ngAfterViewInit() { 
    $(this.el.nativeElement).mask(this.mask); 
    } 
} 

Использование:

<input type='text' [mask]='someBinding'> 

Когда значение someBinding изменений, как выполнить некоторый код, не полагаясь на ngChanges?

ответ

4

Вы можете использовать сеттер метод mask собственности вместо более широкого ngOnChanges:

@Directive({ 
    selector: 'mask' 
}) 
export class MaskDirective implements AfterViewInit { 
    @Input set mask(newValue: string) { 
    $(this.el.nativeElement).mask(newValue); 
    } 

    constructor(public el: ElementRef) {}; 


} 

сеттер будет более эффективным, как это связано только с этим свойством.

+0

Спасибо за ваш ответ; Было бы здорово, если бы это сработало, но затем я получу ошибку «маска» дубликата идентификатора. Вы на самом деле смогли это сделать, чтобы это сработало или? Идеи? –

+1

Не беда в этом - ваше решение работает, за исключением того, что вам нужно украсить саму себя сетью с помощью @Input decorator Я отправил (а) изменение с помощью исправления Thanks! –

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