typescript – Angular2(beta3)“表达式在更新表单值后被检查后发生了变化

这是我之前关于Angular2(带有TS的beta 3)( Angular2 beta: nesting form-based parent/child components and validating from parent)中嵌套表单的帖子的延续,但我发布了一个新问题,因为它引用了一个不同类型的问题.

你可以在http://plnkr.co/edit/iCmmy9at2wF5qY0P6VmV找到这里描述的问题的复制品.简而言之,在这个虚假场景中,我有一个组件代表一个虚构字典中的单个单词,另一个子组件用于表示该单词的每个意义;因此,父组件与其子组件之间存在1对多的关系.两者都有一个基于表单的模板,使用表单生成器构建.子模板在NgFor中,我从父(= word)模型绑定每个意义.这样,每个单词的意义的所有属性都自动绑定到单词的模型.

其中一些属性附加了几个验证器(自定义或标准).我的问题是,当我以编程方式从父组件设置单词模型时(这也意味着设置表单控件的值),这似乎在验证过程中触发了一些竞争条件,这引发了类型EXCEPTION的几个例外:Expression’ !definitionCtl.valid’在检查后发生了变化.上一个值:’true’.当前值:’false’,阻止进一步的代码执行.

AFAIK,这个问题似乎与此问题有关的唯一信息如下:

> https://github.com/angular/angular/issues/5992,
> Angular2: Nested *ngFor resulting in ‘Expression has changed after it was checked’

然而,我的问题的解决方案似乎并没有出现在那些讨论中,除非(如果我理解的话)我选择手动管理我想要避免的所有绑定,就像在现实世界的应用程序中那样他们很多.有人可以帮忙吗?

解决方法

您可以尝试禁用Angular2开发模式:

import {bootstrap} from 'angular2/platform/browser';
import {App} from './app';
import {enableProdMode} from 'angular2/core';

enableProdMode();

bootstrap(App,[])
  .catch(err => console.error(err));

有关详细信息,请参阅Günter的答案:

> In Angular2,why are there 2 times check for content and view after setTimeout?

相关文章

ANGULAR.JS:NG-SELECTANDNG-OPTIONSPS:其实看英文文档比看中...
AngularJS中使用Chart.js制折线图与饼图实例  Chart.js 是...
IE浏览器兼容性后续前言 继续尝试解决IE浏览器兼容性问题,...
Angular实现下拉菜单多选写这篇文章时,引用文章地址如下:h...
在AngularJS应用中集成科大讯飞语音输入功能前言 根据项目...
Angular数据更新不及时问题探讨前言 在修复控制角标正确变...