2017-02-20 2 views
0

Я получил эту директиву, которая устанавливает жидкости высоту на текстовое поле в зависимости от его содержания:Угловое 2 обнаружить изменения только для чтения ввода-х [ngModel] связывания в директиве

@Directive({ 
    selector: '[fluidHeight]', 
    host: { 
    '(ngModelChange)': 'setHeight()' 
    } 
}) 

export class FluidHeightDirective implements AfterViewInit { 

    constructor(private elementRef: ElementRef) {} 

    ngAfterViewInit() { 
    this.setHeight(); 
    } 

    @HostBinding('style.height.px') 
    height: number; 

    setHeight() { 
    console.log(true) 
    this.height = this.elementRef.nativeElement.scrollHeight; 
    } 
} 

Однако я не могу получить его работать, когда я использую [ngModel] вместе с readonly:

<textarea [ngModel]="foo" fluidHeight readonly></textarea> 

Там другое текстовое поле, которое изменяет содержание readonly ввода.

Я пробовал использовать ngModelChange, change и input, но ни один из них не работает.

Кто-нибудь знает, как это сделать?

+0

является 'Foo' контент? – Dinistro

+0

@ Dinistro Да, это так. – Chrillewoodz

ответ

1

Установщик должен сделать трюк:

export class FluidHeightDirective implements AfterViewInit { 

    @Input('fluidHeight') 
    set content(content:any) { 
     this.setHeight(); 
    } 

    constructor(private elementRef: ElementRef) {} 

    ngAfterViewInit() { 
     this.setHeight(); 
    } 

    @HostBinding('style.height.px') 
    height: number; 

    setHeight() { 
     console.log(true); 
     this.height = this.elementRef.nativeElement.scrollHeight; 
    } 
} 
+1

В итоге я получил вход, который принимает ngModel, который в основном является тем же самым решением. Вам не нужен сеттер, чтобы заставить его работать на самом деле. – Chrillewoodz

+0

@Chrillewoodz nice one :) – Dinistro

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