【问题标题】:Two way binding in angular 9 forms角度 9 形式的两种方式绑定
【发布时间】:2021-07-03 02:04:21
【问题描述】:

Angular 9 形式的双向绑定 我尝试在表单中使用 [(ngmodel)] 但它给出了错误这在 angular 6 及更高版本中被贬低

【问题讨论】:

标签: angular typescript angular-reactive-forms angular2-ngmodel angular-template-form


【解决方案1】:

具有反应形式的ngModel

Angular v6 已弃用对 ngModel 输入属性和 ngModelChange 事件与反应式表单指令的支持,并将在 Angular 的未来版本中删除。 p>

现已弃用:

<input [formControl]="control" [(ngModel)]="value">
this.value = 'some value';

这已被弃用有几个原因。首先,开发人员发现这种模式令人困惑。似乎正在使用实际的 ngModel 指令,但实际上它是响应式表单指令上名为 ngModel 的输入/输出属性,它近似于部分但不是全部指令的行为。它允许获取和设置值并拦截值事件,但 ngModel 的一些其他功能,例如使用 ngModelOptions 延迟更新或导出指令,不起作用.

此外,这种模式混合了模板驱动和响应式表单策略,这阻碍了利用这两种策略的全部优势。在模板中设置值违反了响应式表单背后的模板无关原则,而在类中添加 FormControl/FormGroup 层会消除在模板中定义表单的便利性。

要在移除支持之前更新您的代码,您需要决定是坚持使用响应式表单指令(并使用响应式表单模式获取/设置值)还是切换到模板驱动的指令。

之后(选择 1 - 使用反应形式):

<input [formControl]="control">
this.control.setValue('some value');

之后(选择 2 - 使用模板驱动的表单):

<input [(ngModel)]="value">
this.value = 'some value';

默认情况下,当您使用此模式时,您会在开发模式下看到一次弃用警告。您可以选择通过在导入时为 ReactiveFormsModule 提供配置来消除此警告:

imports: [
  ReactiveFormsModule.withConfig({warnOnNgModelWithFormControl: 'never'});
]

或者,您可以选择为该模式的每个实例显示一个单独的警告,配置值为 “always”。这可能有助于在代码更新时跟踪在代码中使用模式的位置。

参考:

https://angular.io/guide/deprecations#ngmodel-with-reactive-forms

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-12
    • 2016-07-01
    • 1970-01-01
    • 2015-09-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多