You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在ngx-formly中用matTextareaAutosize实现textarea自动调整大小?

解决ngx-formly中matTextareaAutosize自动调整大小的问题

我懂你碰到的这个坑了——直接在HTML里写<textarea matInput matTextareaAutosize></textarea>完全正常,但把matTextareaAutosize加到ngx-formly的字段配置里就失效了。这是因为ngx-formly的Material textarea组件默认不会自动识别这个指令,得用正确的方式把它绑定到textarea元素上。

下面给你两种可行的解决方案:

方案一:通过字段的directives属性注入指令

这是最快捷的方法,你只需要在字段配置里添加directives数组,把MatTextareaAutosize指令放进去,同时确保在你的模块中导入MatTextareaAutosizeModule。

示例代码

首先在组件里导入指令:

import { MatTextareaAutosize } from '@angular/material/input';

然后修改字段配置:

{
  key: 'something',
  type: 'textarea',
  templateOptions: {
    label: 'Something',
  },
  // 把MatTextareaAutosize指令添加到这里
  directives: [MatTextareaAutosize],
}

最后别忘了在你的模块中导入对应的模块:

import { MatTextareaAutosizeModule } from '@angular/material/input';

@NgModule({
  imports: [
    // ... 其他你需要的模块
    MatTextareaAutosizeModule,
  ],
})
export class YourFeatureModule { }

方案二:自定义带自动调整的Formly Textarea组件

如果方案一没生效,你可以自定义一个封装了matTextareaAutosize的textarea组件,替换默认的textarea类型。

步骤1:创建自定义组件

import { Component } from '@angular/core';
import { FieldType, FieldTypeConfig } from '@ngx-formly/material';

@Component({
  template: `
    <textarea
      matInput
      matTextareaAutosize
      [formControl]="formControl"
      [formlyAttributes]="field"
    ></textarea>
  `,
})
export class AutosizeTextareaComponent extends FieldType<FieldTypeConfig> { }

步骤2:在模块中注册组件

import { NgModule } from '@angular/core';
import { ReactiveFormsModule } from '@angular/forms';
import { FormlyModule } from '@ngx-formly/core';
import { FormlyMaterialModule } from '@ngx-formly/material';
import { AutosizeTextareaComponent } from './autosize-textarea.component';
import { MatTextareaAutosizeModule } from '@angular/material/input';

@NgModule({
  imports: [
    ReactiveFormsModule,
    FormlyMaterialModule,
    MatTextareaAutosizeModule,
    FormlyModule.forRoot({
      types: [
        { name: 'autosize-textarea', component: AutosizeTextareaComponent },
      ],
    }),
  ],
  declarations: [AutosizeTextareaComponent],
})
export class YourFeatureModule { }

步骤3:在字段配置中使用自定义类型

{
  key: 'something',
  // 使用我们自定义的类型
  type: 'autosize-textarea',
  templateOptions: {
    label: 'Something',
  },
}

为什么之前的方法不行?

因为matTextareaAutosize是Angular指令,不是普通的HTML属性或者ngx-formly的templateOptions配置项,所以直接把它加到字段对象或templateOptions里,ngx-formly根本不知道要把这个指令应用到textarea元素上,自然就没效果啦。

内容的提问来源于stack exchange,提问作者user818991

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 04:27:48