Reactive Forms two-way binding error: Cannot assign to read only property
Reactive Forms two-way binding error: Cannot assign to read only property
我正在尝试通过以下代码实现双向绑定:
export interface User {
name: string;
subscribed: boolean;
}
export class UserEditComponent implements OnInit {
modifiedUser: User;
userForm: FormGroup;
ngOnInit() {
this.userForm = this.fb.group({
name: ['', Validators.required],
subscribed: false
});
this.route.paramMap.switchMap((params: ParamMap) => {
return this.userService.getUser(params.get('id'));
}).subscribe((user) => {
this.modifiedUser = user;
this.userForm.setValue({
name: this.modifiedUser.name,
subscribed: this.modifiedUser.subscribed
});
});
this.userForm.valueChanges.subscribe((data) => {
this.modifiedUser.subscribed = data.subscribed;
});
}
}
<form [formGroup]="userForm">
<textarea class="form-control" formControlName="name">{{modifiedUser.name}}</textarea>
<input type="checkbox" class="custom-control-input" formControlName="subscribed">
</form>
但是,一旦表单出现,我总是在控制台中收到错误 TypeError: Cannot assign to read only property 'subscribed' of object '[object Object]'
。知道为什么吗?
this.modifiedUser
原来确实是只读的。我不得不简单地制作 user
对象的深拷贝来解决这个问题。
检查你的模块设置,你有这样的东西吗?
StoreModule.forRoot(reducers, {
metaReducers,
runtimeChecks: {
strictStateImmutability: true,
strictActionImmutability: false,
strictStateSerializability: true,
strictActionSerializability: true
}
})
我禁用了 strictActionImmutability
属性,另一种选择是 运行 ng serve --prod
和 --prod
标志,如果你只 运行 ng serve
您需要将 runtimeChecks
对象中的 strictActionImmutability
属性 设置为 false
我正在尝试通过以下代码实现双向绑定:
export interface User {
name: string;
subscribed: boolean;
}
export class UserEditComponent implements OnInit {
modifiedUser: User;
userForm: FormGroup;
ngOnInit() {
this.userForm = this.fb.group({
name: ['', Validators.required],
subscribed: false
});
this.route.paramMap.switchMap((params: ParamMap) => {
return this.userService.getUser(params.get('id'));
}).subscribe((user) => {
this.modifiedUser = user;
this.userForm.setValue({
name: this.modifiedUser.name,
subscribed: this.modifiedUser.subscribed
});
});
this.userForm.valueChanges.subscribe((data) => {
this.modifiedUser.subscribed = data.subscribed;
});
}
}
<form [formGroup]="userForm">
<textarea class="form-control" formControlName="name">{{modifiedUser.name}}</textarea>
<input type="checkbox" class="custom-control-input" formControlName="subscribed">
</form>
但是,一旦表单出现,我总是在控制台中收到错误 TypeError: Cannot assign to read only property 'subscribed' of object '[object Object]'
。知道为什么吗?
this.modifiedUser
原来确实是只读的。我不得不简单地制作 user
对象的深拷贝来解决这个问题。
检查你的模块设置,你有这样的东西吗?
StoreModule.forRoot(reducers, {
metaReducers,
runtimeChecks: {
strictStateImmutability: true,
strictActionImmutability: false,
strictStateSerializability: true,
strictActionSerializability: true
}
})
我禁用了 strictActionImmutability
属性,另一种选择是 运行 ng serve --prod
和 --prod
标志,如果你只 运行 ng serve
您需要将 runtimeChecks
对象中的 strictActionImmutability
属性 设置为 false