feat(forms): changed all form directives to have basic control attributes
This commit is contained in:
@ -0,0 +1,19 @@
|
||||
import {AbstractControl} from '../model';
|
||||
|
||||
export class AbstractControlDirective {
|
||||
get control(): AbstractControl { return null; }
|
||||
|
||||
get value(): any { return this.control.value; }
|
||||
|
||||
get valid(): boolean { return this.control.valid; }
|
||||
|
||||
get errors(): StringMap<string, any> { return this.control.errors; }
|
||||
|
||||
get pristine(): boolean { return this.control.pristine; }
|
||||
|
||||
get dirty(): boolean { return this.control.dirty; }
|
||||
|
||||
get touched(): boolean { return this.control.touched; }
|
||||
|
||||
get untouched(): boolean { return this.control.untouched; }
|
||||
}
|
@ -1,4 +1,5 @@
|
||||
import {Form} from './form_interface';
|
||||
import {AbstractControlDirective} from './abstract_control_directive';
|
||||
import {List} from 'angular2/src/facade/collection';
|
||||
|
||||
/**
|
||||
@ -6,7 +7,7 @@ import {List} from 'angular2/src/facade/collection';
|
||||
*
|
||||
* Only used by the forms module.
|
||||
*/
|
||||
export class ControlContainer {
|
||||
export class ControlContainer extends AbstractControlDirective {
|
||||
name: string;
|
||||
get formDirective(): Form { return null; }
|
||||
get path(): List<string> { return null; }
|
||||
|
@ -1,6 +1,6 @@
|
||||
import {NgControl} from './ng_control';
|
||||
import {NgControlGroup} from './ng_control_group';
|
||||
import {Control} from '../model';
|
||||
import {Control, ControlGroup} from '../model';
|
||||
|
||||
/**
|
||||
* An interface that {@link NgFormModel} and {@link NgForm} implement.
|
||||
@ -13,5 +13,6 @@ export interface Form {
|
||||
getControl(dir: NgControl): Control;
|
||||
addControlGroup(dir: NgControlGroup): void;
|
||||
removeControlGroup(dir: NgControlGroup): void;
|
||||
getControlGroup(dir: NgControlGroup): ControlGroup;
|
||||
updateModel(dir: NgControl, value: any): void;
|
||||
}
|
@ -1,5 +1,5 @@
|
||||
import {ControlValueAccessor} from './control_value_accessor';
|
||||
import {Control} from '../model';
|
||||
import {AbstractControlDirective} from './abstract_control_directive';
|
||||
|
||||
/**
|
||||
* An abstract class that all control directive extend.
|
||||
@ -8,13 +8,12 @@ import {Control} from '../model';
|
||||
*
|
||||
* @exportedAs angular2/forms
|
||||
*/
|
||||
export class NgControl {
|
||||
export class NgControl extends AbstractControlDirective {
|
||||
name: string = null;
|
||||
valueAccessor: ControlValueAccessor = null;
|
||||
|
||||
get validator(): Function { return null; }
|
||||
get path(): List<string> { return null; }
|
||||
get control(): Control { return null; }
|
||||
|
||||
viewToModelUpdate(newValue: any): void {}
|
||||
}
|
||||
|
@ -5,6 +5,8 @@ import {CONST_EXPR} from 'angular2/src/facade/lang';
|
||||
|
||||
import {ControlContainer} from './control_container';
|
||||
import {controlPath} from './shared';
|
||||
import {ControlGroup} from '../model';
|
||||
import {Form} from './form_interface';
|
||||
|
||||
const controlGroupBinding =
|
||||
CONST_EXPR(new Binding(ControlContainer, {toAlias: forwardRef(() => NgControlGroup)}));
|
||||
@ -66,7 +68,9 @@ export class NgControlGroup extends ControlContainer {
|
||||
|
||||
onDestroy() { this.formDirective.removeControlGroup(this); }
|
||||
|
||||
get control(): ControlGroup { return this.formDirective.getControlGroup(this); }
|
||||
|
||||
get path(): List<string> { return controlPath(this.name, this._parent); }
|
||||
|
||||
get formDirective(): any { return this._parent.formDirective; }
|
||||
get formDirective(): Form { return this._parent.formDirective; }
|
||||
}
|
@ -67,14 +67,12 @@ export class NgForm extends ControlContainer implements Form {
|
||||
|
||||
get formDirective(): Form { return this; }
|
||||
|
||||
get control(): ControlGroup { return this.form; }
|
||||
|
||||
get path(): List<string> { return []; }
|
||||
|
||||
get controls(): StringMap<string, AbstractControl> { return this.form.controls; }
|
||||
|
||||
get value(): any { return this.form.value; }
|
||||
|
||||
get errors(): any { return this.form.errors; }
|
||||
|
||||
addControl(dir: NgControl): void {
|
||||
this._later(_ => {
|
||||
var container = this._findContainer(dir.path);
|
||||
@ -116,6 +114,10 @@ export class NgForm extends ControlContainer implements Form {
|
||||
});
|
||||
}
|
||||
|
||||
getControlGroup(dir: NgControlGroup): ControlGroup {
|
||||
return <ControlGroup>this.form.find(dir.path);
|
||||
}
|
||||
|
||||
updateModel(dir: NgControl, value: any): void {
|
||||
this._later(_ => {
|
||||
var c = <Control>this.form.find(dir.path);
|
||||
|
@ -102,6 +102,8 @@ export class NgFormModel extends ControlContainer implements Form {
|
||||
|
||||
get formDirective(): Form { return this; }
|
||||
|
||||
get control(): ControlGroup { return this.form; }
|
||||
|
||||
get path(): List<string> { return []; }
|
||||
|
||||
addControl(dir: NgControl): void {
|
||||
@ -119,6 +121,10 @@ export class NgFormModel extends ControlContainer implements Form {
|
||||
|
||||
removeControlGroup(dir: NgControlGroup) {}
|
||||
|
||||
getControlGroup(dir: NgControlGroup): ControlGroup {
|
||||
return <ControlGroup>this.form.find(dir.path);
|
||||
}
|
||||
|
||||
updateModel(dir: NgControl, value: any): void {
|
||||
var c = <Control>this.form.find(dir.path);
|
||||
c.updateValue(value);
|
||||
|
Reference in New Issue
Block a user