2017-02-20 72 views
0

结合我有这个指令取决于其含量设定了一个textarea流体高度:角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; 
    } 
} 

但是我不能让它

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

还有一个textarea的这改变了readonly输入的内容:当我使用[ngModel]readonly一起工作。

我试过使用ngModelChange,changeinput但他们都没有工作。

有谁知道如何做到这一点?

+0

是'foo'您的内容? – Dinistro

+0

@Dinistro是的。 – Chrillewoodz

回答

1

setter是应该做的伎俩:

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的输入,这个输入基本上与此相同。你不需要setter来使它实际工作。 – Chrillewoodz

+0

@Chrillewoodz不错的一个:) – Dinistro