Angularjs   发布时间:2022-04-20  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了angular – 如何在textarea上使用[(ngModel)]绑定时避免ExpressionChangedAfterItHasBeenCheckedError大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
我创建了一个组件,表示用于修改对象详细信息的表单.该对象存在于app.component.ts中:

export class AppComponent {
  selectedItem: Item;
}

它通过双向绑定传递到app.component.html中的组件,如下所示:

<item-details [(item)]="selectedItem"></item-details>

在组件内,Item的各个字段绑定到输入控件,以允许用户更新数据,例如:

<mat-form-field class=name>
  <input matInput [(ngModel)]="item.name" value="{{item.name}}" required placeholder="Name">
  <mat-error>Item name can not be left blank</mat-error>
</mat-form-field>

一切都很好,直到我到达textarea:

<mat-form-field class="full-width">
  <textarea id=description matInput [(ngModel)]="item.description" placeholder="Description">{{item.description}}</textarea>
</mat-form-field>

它工作,但它抛出一个例外:

ExpressionChangedAfterItHasBeenCheckedError

错误并未直接与< textarea>相关联,因为它表示该值从false变为true,因此似乎与表单上的有效属性相关,如here所示.

有趣的是,我可以通过修改< textarea>< / textarea>的内容来避免错误.例如在内容后面加一个空格:

<textarea ...>{{item.description}} </textarea>

但是只有当item.description不为null时才有效.当它为null然后我再次得到错误.

我正在从另一个子组件触发对selectedItem的更改,该组件也对selectedItem具有双向绑定.当用户选择项目时,新项目将向上流向应用程序,然后返回到详细信息组件.

我看过Everything you need to know about the ‘ExpressionChangedAfterItHasBeenCheckedError’ error文章.引用文章“我不建议使用它们,而是重新设计您的应用程序”.

大!怎么样?如何构造事物以便控件A用于选择项目,控件B用于编辑它?控件A和B在没有触发此错误的情况下相互通信的正确方法是什么?

解决方法

这个错误让我非常疯狂,它只在升级到Angular 5之后才显露出来.在我的情况下,我没有使用[(ngModel)].我正在使用textarea仅用于显示目的(以获得材料的外观和感觉).然而,这可能对其他人像我一样无休止地搜索有所帮助.

我发现如果你绑定到textarea的[value]属性而不是使用插值{{}},那么错误就会消失.

而不是:< textarea> {{value}}< / textarea>

执行:< textarea [value] =“value”>< / textarea>

您对< input>没有任何问题因为它是单标签元素,因此必须使用属性绑定而不是插值. (要清楚的是,您只需要将插值与值一起使用,因为您绑定到仅评估一次的属性.绑定到[value],这是一个属性,您不再需要{{}}.请参阅角度文档,其中非常清楚地解释了这一点.)

我怀疑使用插值时,angular会在第一个摘要周期将表单设置为false,而在第二个摘要时将其设置为true,以便识别该值.使用[value]属性绑定,它会识别第一个摘要上的值.

无论如何,它都有效.

大佬总结

以上是大佬教程为你收集整理的angular – 如何在textarea上使用[(ngModel)]绑定时避免ExpressionChangedAfterItHasBeenCheckedError全部内容,希望文章能够帮你解决angular – 如何在textarea上使用[(ngModel)]绑定时避免ExpressionChangedAfterItHasBeenCheckedError所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: