feat(forms): make valueChanges and statusChanges available on abstract control directives
This commit is contained in:
parent
83208983b3
commit
de127109f9
|
@ -6,11 +6,13 @@
|
||||||
* found in the LICENSE file at https://angular.io/license
|
* found in the LICENSE file at https://angular.io/license
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
import {Observable} from '../facade/async';
|
||||||
import {unimplemented} from '../facade/exceptions';
|
import {unimplemented} from '../facade/exceptions';
|
||||||
import {isPresent} from '../facade/lang';
|
import {isPresent} from '../facade/lang';
|
||||||
import {AbstractControl} from '../model';
|
import {AbstractControl} from '../model';
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Base class for control directives.
|
* Base class for control directives.
|
||||||
*
|
*
|
||||||
|
@ -37,5 +39,13 @@ export abstract class AbstractControlDirective {
|
||||||
|
|
||||||
get untouched(): boolean { return isPresent(this.control) ? this.control.untouched : null; }
|
get untouched(): boolean { return isPresent(this.control) ? this.control.untouched : null; }
|
||||||
|
|
||||||
|
get statusChanges(): Observable<any> {
|
||||||
|
return isPresent(this.control) ? this.control.statusChanges : null;
|
||||||
|
}
|
||||||
|
|
||||||
|
get valueChanges(): Observable<any> {
|
||||||
|
return isPresent(this.control) ? this.control.valueChanges : null;
|
||||||
|
}
|
||||||
|
|
||||||
get path(): string[] { return null; }
|
get path(): string[] { return null; }
|
||||||
}
|
}
|
||||||
|
|
|
@ -141,6 +141,8 @@ export function main() {
|
||||||
expect(form.dirty).toBe(formModel.dirty);
|
expect(form.dirty).toBe(formModel.dirty);
|
||||||
expect(form.touched).toBe(formModel.touched);
|
expect(form.touched).toBe(formModel.touched);
|
||||||
expect(form.untouched).toBe(formModel.untouched);
|
expect(form.untouched).toBe(formModel.untouched);
|
||||||
|
expect(form.statusChanges).toBe(formModel.statusChanges);
|
||||||
|
expect(form.valueChanges).toBe(formModel.valueChanges);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('addControl', () => {
|
describe('addControl', () => {
|
||||||
|
@ -295,6 +297,8 @@ export function main() {
|
||||||
expect(form.dirty).toBe(formModel.dirty);
|
expect(form.dirty).toBe(formModel.dirty);
|
||||||
expect(form.touched).toBe(formModel.touched);
|
expect(form.touched).toBe(formModel.touched);
|
||||||
expect(form.untouched).toBe(formModel.untouched);
|
expect(form.untouched).toBe(formModel.untouched);
|
||||||
|
expect(form.statusChanges).toBe(formModel.statusChanges);
|
||||||
|
expect(form.valueChanges).toBe(formModel.valueChanges);
|
||||||
});
|
});
|
||||||
|
|
||||||
describe('addControl & addFormGroup', () => {
|
describe('addControl & addFormGroup', () => {
|
||||||
|
@ -367,6 +371,8 @@ export function main() {
|
||||||
expect(controlGroupDir.dirty).toBe(formModel.dirty);
|
expect(controlGroupDir.dirty).toBe(formModel.dirty);
|
||||||
expect(controlGroupDir.touched).toBe(formModel.touched);
|
expect(controlGroupDir.touched).toBe(formModel.touched);
|
||||||
expect(controlGroupDir.untouched).toBe(formModel.untouched);
|
expect(controlGroupDir.untouched).toBe(formModel.untouched);
|
||||||
|
expect(controlGroupDir.statusChanges).toBe(formModel.statusChanges);
|
||||||
|
expect(controlGroupDir.valueChanges).toBe(formModel.valueChanges);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -382,6 +388,8 @@ export function main() {
|
||||||
expect(controlDir.dirty).toBe(control.dirty);
|
expect(controlDir.dirty).toBe(control.dirty);
|
||||||
expect(controlDir.touched).toBe(control.touched);
|
expect(controlDir.touched).toBe(control.touched);
|
||||||
expect(controlDir.untouched).toBe(control.untouched);
|
expect(controlDir.untouched).toBe(control.untouched);
|
||||||
|
expect(controlDir.statusChanges).toBe(control.statusChanges);
|
||||||
|
expect(controlDir.valueChanges).toBe(control.valueChanges);
|
||||||
};
|
};
|
||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
|
@ -431,6 +439,8 @@ export function main() {
|
||||||
expect(ngModel.dirty).toBe(control.dirty);
|
expect(ngModel.dirty).toBe(control.dirty);
|
||||||
expect(ngModel.touched).toBe(control.touched);
|
expect(ngModel.touched).toBe(control.touched);
|
||||||
expect(ngModel.untouched).toBe(control.untouched);
|
expect(ngModel.untouched).toBe(control.untouched);
|
||||||
|
expect(ngModel.statusChanges).toBe(control.statusChanges);
|
||||||
|
expect(ngModel.valueChanges).toBe(control.valueChanges);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should set up validator', fakeAsync(() => {
|
it('should set up validator', fakeAsync(() => {
|
||||||
|
@ -469,6 +479,8 @@ export function main() {
|
||||||
expect(controlNameDir.dirty).toBe(formModel.dirty);
|
expect(controlNameDir.dirty).toBe(formModel.dirty);
|
||||||
expect(controlNameDir.touched).toBe(formModel.touched);
|
expect(controlNameDir.touched).toBe(formModel.touched);
|
||||||
expect(controlNameDir.untouched).toBe(formModel.untouched);
|
expect(controlNameDir.untouched).toBe(formModel.untouched);
|
||||||
|
expect(controlNameDir.statusChanges).toBe(formModel.statusChanges);
|
||||||
|
expect(controlNameDir.valueChanges).toBe(formModel.valueChanges);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
|
@ -1247,10 +1247,10 @@ export function main() {
|
||||||
let formValue: Object;
|
let formValue: Object;
|
||||||
|
|
||||||
ObservableWrapper.subscribe(
|
ObservableWrapper.subscribe(
|
||||||
form.form.statusChanges, (status: string) => { formValidity = status; });
|
form.statusChanges, (status: string) => { formValidity = status; });
|
||||||
|
|
||||||
ObservableWrapper.subscribe(
|
ObservableWrapper.subscribe(
|
||||||
form.form.valueChanges, (value: string) => { formValue = value; });
|
form.valueChanges, (value: string) => { formValue = value; });
|
||||||
|
|
||||||
tick();
|
tick();
|
||||||
|
|
||||||
|
|
|
@ -50,10 +50,12 @@ export declare abstract class AbstractControlDirective {
|
||||||
};
|
};
|
||||||
path: string[];
|
path: string[];
|
||||||
pristine: boolean;
|
pristine: boolean;
|
||||||
|
statusChanges: Observable<any>;
|
||||||
touched: boolean;
|
touched: boolean;
|
||||||
untouched: boolean;
|
untouched: boolean;
|
||||||
valid: boolean;
|
valid: boolean;
|
||||||
value: any;
|
value: any;
|
||||||
|
valueChanges: Observable<any>;
|
||||||
}
|
}
|
||||||
|
|
||||||
export declare class CheckboxControlValueAccessor implements ControlValueAccessor {
|
export declare class CheckboxControlValueAccessor implements ControlValueAccessor {
|
||||||
|
|
Loading…
Reference in New Issue