Angular 从可观察对象返回formbuilder数组
我需要为数组类型控件返回FormControl数组。 但我需要知道有多少值进入我的可观测范围,才能装载这些数据 代码如下:Angular 从可观察对象返回formbuilder数组,angular,forms,typescript,observable,Angular,Forms,Typescript,Observable,我需要为数组类型控件返回FormControl数组。 但我需要知道有多少值进入我的可观测范围,才能装载这些数据 代码如下: users$ = this._store.select(usersSelectors.getUsers); createForm(): void { this.myForm = this._formBuilder.group({ users: this.buildArray(), }); } buildArray(): any {
users$ = this._store.select(usersSelectors.getUsers);
createForm(): void {
this.myForm = this._formBuilder.group({
users: this.buildArray(),
});
}
buildArray(): any {
this.users$.subscribe((data) => {
if (data) {
const values = data.map(() => new FormControl(false));
return this._formBuilder.array(values);
}
});
}
原因是,在HTML中,我可以创建动态复选框,并为用户启用特定操作
component.html
<div class="col-md-3">
<label for="users">Users</label>
<div id="users" class="row">
<div class="checkbox" class="col-sm-4"
formArrayName="users"
*ngFor="let item of myForm.get('users').controls; let i = index" >
<label class="checkbox-inline">
<input type="checkbox" [formControlName]="i"> {{ users$[i] }}
</label>
</div>
使用者
{{users$[i]}
首先,您没有返回一个可观察的。您没有返回任何内容(您没有在函数中添加任何return语句)
另外,如果您添加了一个订阅,您将返回一个订阅,因为您在函数中使用了subscribe
如果要从可观察对象创建表单数组,请执行以下操作:
users$ = this._store.select(usersSelectors.getUsers);
createForm(): void {
this.users$
.pipe(
filter(data => !!data),
map(users => this._formBuilder.array(users.map(() => new FormControl(false))))
)
.subscribe(usersFormArray => this.myForm = this._formBuilder.group({
users: usersFormArray
})
});
}
您不需要另一个函数,因为这个函数可以实现您想要的一切
首先过滤数据:这相当于一个条件。如果没有任何数据,则不会触发订阅
然后,映射可观察值以返回表单数组
最后,使用映射值订阅并创建表单 好的,我明白,但是HTML呢?如何访问可观察值以在复选框中显示用户名?@Luiz您的HTML不会更改,您只需要附加一个条件(您应该已经具备),例如
*ngIf=“myForm”
,以避免表单未定义时出错(这可能会发生,因为在某些情况下,您的存储不会返回值)好的,但我的表单也有其他字段。。。但是我可以用上面的逻辑创建一个方法来返回formControl数组吗?@Luiz-well这是你应该做的。。。您可以使用myForm.addControl()
将控件添加到表单中,或者如果它们不依赖于可观察对象,您只需在生成器调用中添加它们即可。