Angular 加载新ng容器时未初始化表单值
Angular 加载新ng容器时未初始化表单值,angular,angular-forms,Angular,Angular Forms,Plunkr链接: 我的HTML模板中有以下ngSwitch代码: <ng-container [ngSwitch]="f.value.visitFrequency"> <ng-container *ngSwitchCase="'weekday'"> <div class="row form-group" ngModelGroup="weekday"> <div class="btn-group btn-group-justifi
Plunkr
链接:
我的HTML模板中有以下ngSwitch
代码:
<ng-container [ngSwitch]="f.value.visitFrequency">
<ng-container *ngSwitchCase="'weekday'">
<div class="row form-group" ngModelGroup="weekday">
<div class="btn-group btn-group-justified" data-toggle="buttons" role="group">
<label class="btn btn-info"
*ngFor="let wday of wdays"
[class.active]="f.value.weekday[wday]">
<input type="checkbox"
[name]="wday"
[id]="wday"
ngModel
[value]="wday">{{ wday }}
</label>
</div>
</div>
</ng-container>
<ng-container>
<div class="row form-group" *ngSwitchDefault>
<p>Please choose something</p>
</div>
</ng-container>
</ng-container>
星期一是数组wdays
中的第一个值,该数组正在循环创建复选框(如果不清楚的话)
我只收到此错误,对于星期二
,我没有收到相同的错误。这一点自始至终都是一致的。当我选择一个差异visitFrequency
时,我仍然会收到错误,但仍然只会收到循环通过的数组的第一项
我怀疑表单值尚未启动,因此引发了错误。问题是在加载组件时不会发生这种情况 我知道你现在有什么问题。这是关于
ngModelGroup
的误用。您在启动之前使用它的值
请参阅[class.active]=“f.value.weekday[wday]”
,如果从plunkr中删除此代码,它将正常工作。当然,这不是你想要的
#1
看到我的叉子砰的一声了吗。
我创建一个checkClass
来记录表单的值。显然,ngModuleGroup
会在第二轮更改检测之前获取其子控件的值
这是避免错误的糟糕方法,因为每次更改检测都会调用该方法
#2
还有另一种方法,请参阅此参考:此参考问题
您可以创建一个指令来检测开关盒的启动。然后将初始值对象(如{monday:'',beday:''/…}
分配给ngModelGroup
),这样您就不会得到性能更好的错误
#3
忘记提到一个本机支持,比如f.value?.weekday?[wday]
。
. 解决方法应该是
f.value?。工作日和&f.value。工作日[wday]
信息不足以回答问题。首先,您可能会错过placengSwitchDefault
。其次,您的输入标记必须误用ngModel
。最后,您没有提到其余的数组数据是否显示良好。您还需要什么信息?除此之外,我也无法获得更多信息。在ngSwitchDefault
上有很好的捕捉。你说后者是什么意思?为什么它必须误用ngModel?我使用的是模板驱动的方法。您不需要在ngModel
上绑定任何东西,也不需要将任何东西绑定到ngModel
。这不是误用,如果您不打算在组件中使用输入,而只将值保存到表单中,这是标准做法。对不起,我以前没有见过这种方法。这不是一个常见的用例。顺便说一句,重现问题的最好方法是创建一个plunkr来显示问题,你可以试试我的plunkr模板。我仍然对为什么会发生这种情况感到震惊。您所说的是误用,您是否会以这种方式使用ngModelGroup
?我在其他地方看到了完全相同的实现。我添加了另一种方法。您的误用是因为您将它与动态初始化和销毁视图的ngSwitch
一起使用。这反映了相同的表单数据结构。如果你有任何问题。请告诉我。谢谢你的解释。但是,您的#3解决方案为我抛出了以下错误:条件表达式f.value?.weekday?[wday]需要在表达式[f.value?.weekday?[wday]]的末尾使用所有3个表达式。
很抱歉,听起来像。解决方案3目前非常适合,我将注意对角度语法的更改。
ERROR TypeError: Cannot read property 'Monday' of undefined