feat(forms): make 'parent' a public property of 'AbstractControl' (#11855)
This commit is contained in:
parent
b9fc090143
commit
445e5922ec
|
@ -11,7 +11,7 @@ import {fromPromise} from 'rxjs/observable/fromPromise';
|
|||
import {composeAsyncValidators, composeValidators} from './directives/shared';
|
||||
import {AsyncValidatorFn, ValidatorFn} from './directives/validators';
|
||||
import {EventEmitter, Observable} from './facade/async';
|
||||
import {ListWrapper, StringMapWrapper} from './facade/collection';
|
||||
import {StringMapWrapper} from './facade/collection';
|
||||
import {isBlank, isPresent, isStringMap, normalizeBool} from './facade/lang';
|
||||
import {isPromise} from './private_import_core';
|
||||
|
||||
|
@ -48,7 +48,7 @@ function _find(control: AbstractControl, path: Array<string|number>| string, del
|
|||
if (!(path instanceof Array)) {
|
||||
path = (<string>path).split(delimiter);
|
||||
}
|
||||
if (path instanceof Array && ListWrapper.isEmpty(path)) return null;
|
||||
if (path instanceof Array && (path.length === 0)) return null;
|
||||
|
||||
return (<Array<string|number>>path).reduce((v, name) => {
|
||||
if (v instanceof FormGroup) {
|
||||
|
@ -109,6 +109,11 @@ export abstract class AbstractControl {
|
|||
*/
|
||||
get value(): any { return this._value; }
|
||||
|
||||
/**
|
||||
* The parent control.
|
||||
*/
|
||||
get parent(): FormGroup|FormArray { return this._parent; }
|
||||
|
||||
/**
|
||||
* The validation status of the control. There are four possible
|
||||
* validation statuses:
|
||||
|
@ -491,7 +496,7 @@ export abstract class AbstractControl {
|
|||
* If no path is given, it checks for the error on the present control.
|
||||
*/
|
||||
getError(errorCode: string, path: string[] = null): any {
|
||||
var control = isPresent(path) && !ListWrapper.isEmpty(path) ? this.get(path) : this;
|
||||
const control = isPresent(path) && (path.length > 0) ? this.get(path) : this;
|
||||
if (isPresent(control) && isPresent(control._errors)) {
|
||||
return control._errors[errorCode];
|
||||
} else {
|
||||
|
@ -564,7 +569,7 @@ export abstract class AbstractControl {
|
|||
|
||||
/** @internal */
|
||||
_anyControlsHaveStatus(status: string): boolean {
|
||||
return this._anyControls((control: AbstractControl) => control.status == status);
|
||||
return this._anyControls((control: AbstractControl) => control.status === status);
|
||||
}
|
||||
|
||||
/** @internal */
|
||||
|
@ -1057,7 +1062,7 @@ export class FormGroup extends AbstractControl {
|
|||
}
|
||||
|
||||
/** @internal */
|
||||
_setUpControls() {
|
||||
_setUpControls(): void {
|
||||
this._forEachChild((control: AbstractControl) => {
|
||||
control.setParent(this);
|
||||
control._registerOnCollectionChange(this._onCollectionChange);
|
||||
|
@ -1065,11 +1070,11 @@ export class FormGroup extends AbstractControl {
|
|||
}
|
||||
|
||||
/** @internal */
|
||||
_updateValue() { this._value = this._reduceValue(); }
|
||||
_updateValue(): void { this._value = this._reduceValue(); }
|
||||
|
||||
/** @internal */
|
||||
_anyControls(condition: Function): boolean {
|
||||
var res = false;
|
||||
let res = false;
|
||||
this._forEachChild((control: AbstractControl, name: string) => {
|
||||
res = res || (this.contains(name) && condition(control));
|
||||
});
|
||||
|
@ -1089,7 +1094,7 @@ export class FormGroup extends AbstractControl {
|
|||
|
||||
/** @internal */
|
||||
_reduceChildren(initValue: any, fn: Function) {
|
||||
var res = initValue;
|
||||
let res = initValue;
|
||||
this._forEachChild(
|
||||
(control: AbstractControl, name: string) => { res = fn(res, control, name); });
|
||||
return res;
|
||||
|
@ -1188,7 +1193,8 @@ export class FormArray extends AbstractControl {
|
|||
* Insert a new {@link AbstractControl} at the given `index` in the array.
|
||||
*/
|
||||
insert(index: number, control: AbstractControl): void {
|
||||
ListWrapper.insert(this.controls, index, control);
|
||||
this.controls.splice(index, 0, control);
|
||||
|
||||
this._registerControl(control);
|
||||
this.updateValueAndValidity();
|
||||
this._onCollectionChange();
|
||||
|
@ -1199,7 +1205,7 @@ export class FormArray extends AbstractControl {
|
|||
*/
|
||||
removeAt(index: number): void {
|
||||
if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});
|
||||
ListWrapper.removeAt(this.controls, index);
|
||||
this.controls.splice(index, 1);
|
||||
this.updateValueAndValidity();
|
||||
this._onCollectionChange();
|
||||
}
|
||||
|
@ -1209,10 +1215,10 @@ export class FormArray extends AbstractControl {
|
|||
*/
|
||||
setControl(index: number, control: AbstractControl): void {
|
||||
if (this.controls[index]) this.controls[index]._registerOnCollectionChange(() => {});
|
||||
ListWrapper.removeAt(this.controls, index);
|
||||
this.controls.splice(index, 1);
|
||||
|
||||
if (control) {
|
||||
ListWrapper.insert(this.controls, index, control);
|
||||
this.controls.splice(index, 0, control);
|
||||
this._registerControl(control);
|
||||
}
|
||||
|
||||
|
|
|
@ -8,6 +8,7 @@ export declare abstract class AbstractControl {
|
|||
[key: string]: any;
|
||||
};
|
||||
invalid: boolean;
|
||||
parent: FormGroup | FormArray;
|
||||
pending: boolean;
|
||||
pristine: boolean;
|
||||
root: AbstractControl;
|
||||
|
|
Loading…
Reference in New Issue