Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 角度反应窗体:在多个formGroup中共享formControl时失去父级_Angular_Angular Reactive Forms - Fatal编程技术网

Angular 角度反应窗体:在多个formGroup中共享formControl时失去父级

Angular 角度反应窗体:在多个formGroup中共享formControl时失去父级,angular,angular-reactive-forms,Angular,Angular Reactive Forms,当不同的formGroups持有相同的formControl时,如果formControl发生更改,则只会通知其中一个 formControl有一个parentattr,但没有parent,当它添加到formGroup时,angular将替换它的parentattr constparent1=newformgroup({}); const partent2=新的FormGroup({}); const control=new FormControl(); parent1.addControl('

当不同的
formGroups
持有相同的
formControl
时,如果
formControl
发生更改,则只会通知其中一个

formControl
有一个
parent
attr,但没有
parent
,当它添加到
formGroup
时,angular将替换它的
parent
attr

constparent1=newformgroup({});
const partent2=新的FormGroup({});
const control=new FormControl();
parent1.addControl('key1',control);
parent2.addControl('key2',control);
parent1.valueChanges.subscribe((数据)=>console.log('parent1 change');
parent2.valueChanges.subscribe((数据)=>console.log('parent2 change');
控件。设置值('v');
//只有父母1改变
我需要一种在不同的
formGroups
中共享
formControl
的方法。手动复制
formControl
非常累人。(复制初始值、复制验证器、订阅值更改)。
有没有更好的方法来共享
formControl

是的,
AbstractControl
有一个属性
parent:FormGroup | FormArray
。因此控件只能有一个父控件

通过以下方式通知家长:

updateValueAndValidity(opts: {onlySelf?: boolean, emitEvent?: boolean} = {}): void {
   this._setInitialStatus();
   this._updateValue();

   if (this.enabled) {
     this._cancelExistingSubscription();
     (this as{errors: ValidationErrors | null}).errors = this._runValidator();
     (this as{status: string}).status = this._calculateStatus();

     if (this.status === VALID || this.status === PENDING) {
       this._runAsyncValidator(opts.emitEvent);
     }
   }

   if (opts.emitEvent !== false) {
     (this.valueChanges as EventEmitter<any>).emit(this.value);
     (this.statusChanges as EventEmitter<string>).emit(this.status);
   }

   if (this._parent && !opts.onlySelf) {//<------------------------
     this._parent.updateValueAndValidity(opts);
   }
}
updateValueAndValidity(选项:{onlySelf?:boolean,emitEvent?:boolean}={}):void{
这是。_setInitialStatus();
这个。_updateValue();
如果(此.enabled){
这是。_取消现有订阅();
(这是{errors:ValidationErrors | null})。errors=this。_runValidator();
(这是{status:string})。status=this。_calculateStatus();
if(this.status==VALID | | this.status==PENDING){
此.\u runAsyncValidator(opts.emitEvent);
}
}
如果(opts.emitEvent!==false){
(this.value更改为EventEmitter).emit(this.value);
(this.status更改为EventEmitter).emit(this.status);
}
如果(此家长仅选择自己){//