我正在使用使用ionic3和angular的自动调整大小的多文本区域,但是它仅适用于单个文本区域。我可以获取解决此问题的指南吗?下面是我的代码
home.html
<ion-list [formGroup]="editForm">
<ion-item>
<ion-label floating class="label">Description1</ion-label>
<ion-textarea autosize formControlName="desc"></ion-textarea>
</ion-item>
<ion-item>
<ion-label floating class="label">Description2</ion-label>
<ion-textarea autosize formControlName="desce"></ion-textarea>
</ion-item>
</ion-list>
Home.ts
import { Component, Directive, OnInit, HostListener, ElementRef } from '@angular/core';
@IonicPage()
@Component({
selector: 'page-home',
templateUrl: 'home.html',
})
@Directive({
selector: 'ion-textarea[autosize]'
})
export class Home implements OnInit {
@HostListener('input', ['$event.target'])
onInput(textArea: HTMLTextAreaElement): void {
this.adjust();
}
constructor(public element: ElementRef,){}
ngOnInit(): void {
setTimeout(() => this.adjust(), 0);
}
adjust(): void {
let textArea =
this.element.nativeElement.getElementsByTagName('textarea')[0];
textArea.style.overflow = 'hidden';
textArea.style.height = 'auto';
textArea.style.height = textArea.scrollHeight + "px";
}
}
最佳答案
它仅适用于单个文本区域,因为您告诉它只能在数组的第一个文本区域上运行
let textArea = this.element.nativeElement.getElementsByTagName('textarea')[0];
getElementsByTagName返回屏幕上所有文本区域的数组。因此,您应该尝试遍历这些。类似于:
const textAreas = this.element.nativeElement.getElementsByTagName('textarea');
textAreas.forEach(textArea => {
textArea.style.overflow = 'hidden';
textArea.style.height = 'auto';
textArea.style.height = textArea.scrollHeight + "px";
});
作为附带说明,您将来可能希望研究使用ViewChild / ViewChildren。这是直接以角度操作/访问dom元素的正确方法,应尽可能使用
I spun up a quick example using ViewChildren here
对ViewChildren和另一个stackoverflow post使用角度文档