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

Angular中textarea使用ngModel时传入的inputValue值不显示问题

问题原因

问题本质是Angular中ngModel的优先级高于textarea标签内的插值内容:

  • 你在textarea标签上声明了ngModel但未给它绑定初始值,Angular表单模块会默认将该控件的初始值设为空
  • ngModel管控表单控件的显示值时,会直接覆盖你写在标签内部的{{ inputValue }}插值内容,所以哪怕最终渲染的HTML源码里能看到默认值,页面实际展示也会以ngModel管控的空值为准,显示空白或占位符
  • 你手动写的onInputChanged方法修改inputValue的逻辑,和ngModel维护的表单控件状态完全不同步,也会导致状态异常
保留ngModel的修复方案

按照以下步骤修改即可:

  1. 先修改组件的TypeScript代码,补充双向绑定所需的输出事件,和ngModel同步逻辑:
import { Component, EventEmitter, Input, OnInit, Output } from '@angular/core';
import { ControlContainer, NgForm } from '@angular/forms';

@Component({
  selector: 'app-text-area',
  templateUrl: './text-area.component.html',
  viewProviders: [ { provide: ControlContainer, useExisting: NgForm } ],
  styleUrls: ['./text-area.component.scss']
})
export class TextAreaComponent implements OnInit {

  @Input("input-id") public inputID: string = "text";
  @Input("input-value") public inputValue: string;
  // 新增输出事件,支持input-value的双向绑定
  @Output("input-valueChange") public inputValueChange = new EventEmitter<string>();

  constructor() { }

  ngOnInit(): void {
  }

  public onValueChanged(newValue: string):void {
    this.inputValue = newValue;
    this.inputValueChange.emit(newValue);
  }

}
  1. 修改组件模板,把inputValue绑定到ngModel,删除标签内的插值内容,用ngModelChange监听值变化:
<textarea
    placeholder="This is my placeholder"
    [name]="inputID"
    [ngModel]="inputValue"
    (ngModelChange)="onValueChanged($event)"
>
</textarea>
  1. 如果父组件需要双向绑定获取更新后的内容,也可以修改父组件调用写法:
<div class="card-body" *ngIf="isEditing">
    <app-text-area input-id="body" [(input-value)]="yourParentVariable"></app-text-area>
</div>

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 06:06:00