【发布时间】:2019-08-31 16:10:55
【问题描述】:
我的表单组件有 onPush 的变化检测策略。我在 ngFor 中有一个代码:
<div *ngFor="let externalLink of edited.externalLinks">
<input #xctrl="ngForm" type="text" class="form-control" id="extId" required [(ngModel)]="externalLink.extId" ngControl="linkExtId_{{externalLink.id}}">
Valid status is {{xctrl.control.valid}}
</div>
用户通过单击按钮在列表中添加新行。
void addExternalLink() {
if (edited != null) {
edited.externalLinks.add(ExternalLink()..id = Uuid().v4().toString());
_cdr.markForCheck();
}
}
输入具有“必需”指令。新行出现后“有效状态为真”,但输入为空。如果用户单击输入并退出控件,则验证状态更改为 false。如果添加两行,效果相同。第一个状态为 false,第二个为 true。
为什么会这样?你能解释一下 onPush 策略时的验证行为吗?
附:如果我更改模板并删除ngControl="linkExtId_{{externalLink.id}}",那么它会按预期工作。在新行上,我看到“有效状态为假”。
【问题讨论】:
-
你能解释一下你的确切问题吗?你的解释真的很模糊!
-
控件的有效属性没有改变。创建行后,我看到“有效状态为真”。但应该是假的。表单点击后有效状态改变,但数据没有改变,验证方法没有执行。
标签: angular dart angular-dart angular-forms