[英]Replicate the behavior of ngModel inside a reactive form - Angular
我用 ngModel 做了一个带有过滤器 pipe 的搜索框,效果很好。
但是这一次,我想在响应式表单中使用那个 searchBox。 它不起作用,因为我在控制台中有一个很大的红色错误。
ERROR Error:
ngModel cannot be used to register form controls with a parent formGroupName or formArrayName directive.
Option 1: Use formControlName instead of ngModel (reactive strategy):
<div [formGroup]="myGroup">
<div formGroupName="person">
<input formControlName="firstName">
</div>
</div>
In your class:
this.myGroup = new FormGroup({
person: new FormGroup({ firstName: new FormControl() })
});
Option 2: Update ngModel's parent be ngModelGroup (template-driven strategy):
<form>
<div ngModelGroup="person">
<input [(ngModel)]="person.name" name="firstName">
</div>
</form>
at Function.formGroupNameException (forms.js:4939)
at NgModel._checkParentType (forms.js:5260)
at NgModel._checkForErrors (forms.js:5252)
at NgModel.ngOnChanges (forms.js:5193)
at NgModel.rememberChangeHistoryAndInvokeOnChangesHook (core.js:1506)
at callHook (core.js:2525)
at callHooks (core.js:2492)
at executeInitAndCheckHooks (core.js:2443)
at selectIndexInternal (core.js:8396)
at Module.ɵɵadvance (core.js:8379)
当我将搜索框移到表单外时,它工作正常。
<div class="searchBox">
<fa-icon [icon]="faSearch" size="1x"></fa-icon>
<input type="search" placeholder="Rechercher une organisation" clrInput class="searchInput"
[(ngModel)]="searchValue">
</div>
我像这样使用过滤器 pipe:
<div *ngFor="let orga of (ListOrgaAndDoctors | filter:searchValue)">
<clr-radio-wrapper>
<input type="radio" clrRadio [value]="orga.id" name="orga" formControlName="orga" />
<label>{{orga.name}}</label>
</clr-radio-wrapper>
</div>
如何在不使用 ngModel 的情况下复制 ngModel 的行为,该行为将数据实时发送到变量“searchValue”?
不要在反应式 forms 中使用ngModel
。 如果您需要动态更改表单字段中的值 - 使用方法patchValue()
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.