Skip to content

Commit a9ad62d

Browse files
devversionandrewseguin
authored andcommitted
fix(slide-toggle) disabled state from a FormControl not updating (#4797)
When setting the disabled state of a slide-toggle using the FormControl's `enable()` and `disable()` methods the slide-toggle's view won't be updated properly. Fixes #4774
1 parent 7af93bc commit a9ad62d

File tree

2 files changed

+9
-1
lines changed

2 files changed

+9
-1
lines changed

src/lib/slide-toggle/slide-toggle.spec.ts

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -618,27 +618,32 @@ describe('MdSlideToggle', () => {
618618

619619
let testComponent: SlideToggleWithFormControl;
620620
let slideToggle: MdSlideToggle;
621+
let inputElement: HTMLInputElement;
621622

622623
beforeEach(() => {
623624
fixture = TestBed.createComponent(SlideToggleWithFormControl);
624625
fixture.detectChanges();
625626

626627
testComponent = fixture.debugElement.componentInstance;
627628
slideToggle = fixture.debugElement.query(By.directive(MdSlideToggle)).componentInstance;
629+
inputElement = fixture.debugElement.query(By.css('input')).nativeElement;
628630
});
629631

630632
it('should toggle the disabled state', () => {
631633
expect(slideToggle.disabled).toBe(false);
634+
expect(inputElement.disabled).toBe(false);
632635

633636
testComponent.formControl.disable();
634637
fixture.detectChanges();
635638

636639
expect(slideToggle.disabled).toBe(true);
640+
expect(inputElement.disabled).toBe(true);
637641

638642
testComponent.formControl.enable();
639643
fixture.detectChanges();
640644

641645
expect(slideToggle.disabled).toBe(false);
646+
expect(inputElement.disabled).toBe(false);
642647
});
643648
});
644649
});

src/lib/slide-toggle/slide-toggle.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {
22
AfterContentInit,
33
ChangeDetectionStrategy,
4+
ChangeDetectorRef,
45
Component,
56
ElementRef,
67
EventEmitter,
@@ -121,7 +122,8 @@ export class MdSlideToggle extends _MdSlideToggleMixinBase
121122

122123
constructor(private _elementRef: ElementRef,
123124
private _renderer: Renderer2,
124-
private _focusOriginMonitor: FocusOriginMonitor) {
125+
private _focusOriginMonitor: FocusOriginMonitor,
126+
private _changeDetectorRef: ChangeDetectorRef) {
125127
super();
126128
}
127129

@@ -190,6 +192,7 @@ export class MdSlideToggle extends _MdSlideToggleMixinBase
190192
/** Implemented as a part of ControlValueAccessor. */
191193
setDisabledState(isDisabled: boolean): void {
192194
this.disabled = isDisabled;
195+
this._changeDetectorRef.markForCheck();
193196
}
194197

195198
/** Focuses the slide-toggle. */

0 commit comments

Comments
 (0)