Permalink
Browse files

fix(forms): support unbound disabled in ngModel (#11736)

  • Loading branch information...
kara authored and IgorMinar committed Sep 20, 2016
1 parent d7d716d commit 39e251eea7006f150adc5db45f757ef02bdca985
@@ -200,7 +200,9 @@ export class NgModel extends NgControl implements OnChanges,
private _updateDisabled(changes: SimpleChanges) {
const disabledValue = changes['isDisabled'].currentValue;
- const isDisabled = disabledValue != null && disabledValue != false;
+
+ const isDisabled =
+ disabledValue === '' || (disabledValue && disabledValue !== 'false');
resolvedPromise.then(() => {
if (isDisabled && !this.control.disabled) {
@@ -485,7 +485,7 @@ export function main() {
});
describe('NgModel', () => {
- var ngModel: any /** TODO #9100 */;
+ let ngModel: NgModel;
beforeEach(() => {
ngModel = new NgModel(
@@ -539,6 +539,45 @@ export function main() {
expect(ngModel.control.errors).toEqual({'async': true});
}));
+
+ it('should mark as disabled properly', fakeAsync(() => {
+ ngModel.ngOnChanges({isDisabled: new SimpleChange('', undefined)});
+ tick();
+ expect(ngModel.control.disabled).toEqual(false);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange('', null)});
+ tick();
+ expect(ngModel.control.disabled).toEqual(false);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange('', false)});
+ tick();
+ expect(ngModel.control.disabled).toEqual(false);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange('', 'false')});
+ tick();
+ expect(ngModel.control.disabled).toEqual(false);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange('', 0)});
+ tick();
+ expect(ngModel.control.disabled).toEqual(false);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange(null, '')});
+ tick();
+ expect(ngModel.control.disabled).toEqual(true);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange(null, 'true')});
+ tick();
+ expect(ngModel.control.disabled).toEqual(true);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange(null, true)});
+ tick();
+ expect(ngModel.control.disabled).toEqual(true);
+
+ ngModel.ngOnChanges({isDisabled: new SimpleChange(null, 'anything else')});
+ tick();
+ expect(ngModel.control.disabled).toEqual(true);
+
+ }));
});
describe('FormControlName', () => {
@@ -420,6 +420,31 @@ export function main() {
});
}));
+ it('should disable a control with unbound disabled attr', fakeAsync(() => {
+ TestBed.overrideComponent(NgModelForm, {
+ set: {
+ template: `
+ <form>
+ <input name="name" [(ngModel)]="name" disabled>
+ </form>
+ `,
+ }
+ });
+ const fixture = TestBed.createComponent(NgModelForm);
+ fixture.detectChanges();
+ tick();
+ const form = fixture.debugElement.children[0].injector.get(NgForm);
+ expect(form.control.get('name').disabled).toBe(true);
+
+ const input = fixture.debugElement.query(By.css('input'));
+ expect(input.nativeElement.disabled).toEqual(true);
+
+ form.control.enable();
+ fixture.detectChanges();
+ tick();
+ expect(input.nativeElement.disabled).toEqual(false);
+ }));
+
});
describe('radio controls', () => {

0 comments on commit 39e251e

Please sign in to comment.