From b1ceeecd88aa8e53edd8d78adfa5390391899179 Mon Sep 17 00:00:00 2001 From: tinayuangao Date: Fri, 29 Sep 2017 13:16:12 -0700 Subject: [PATCH] Update button toggle group disabled (#6991) --- src/lib/button-toggle/button-toggle.spec.ts | 11 +++++++++++ src/lib/button-toggle/button-toggle.ts | 18 ++++++++++++++++++ 2 files changed, 29 insertions(+) diff --git a/src/lib/button-toggle/button-toggle.spec.ts b/src/lib/button-toggle/button-toggle.spec.ts index fa793edd8a3..6d67caa7e7d 100644 --- a/src/lib/button-toggle/button-toggle.spec.ts +++ b/src/lib/button-toggle/button-toggle.spec.ts @@ -245,6 +245,17 @@ describe('MatButtonToggle without forms', () => { buttonToggleNativeElements[0].click(); expect(buttonToggleInstances[0].checked).toBe(false); + expect(buttonToggleInstances[0].disabled).toBe(true); + + testComponent.isGroupDisabled = false; + fixture.detectChanges(); + + expect(buttonToggleInstances[0].disabled).toBe(false); + + buttonToggleLabelElements[0].click(); + fixture.detectChanges(); + + expect(buttonToggleInstances[0].checked).toBe(true); }); it('should update the group value when one of the toggles changes', () => { diff --git a/src/lib/button-toggle/button-toggle.ts b/src/lib/button-toggle/button-toggle.ts index 7bc8fa72da9..29f80c92446 100644 --- a/src/lib/button-toggle/button-toggle.ts +++ b/src/lib/button-toggle/button-toggle.ts @@ -224,6 +224,13 @@ export class MatButtonToggleGroup extends _MatButtonToggleGroupMixinBase */ setDisabledState(isDisabled: boolean): void { this.disabled = isDisabled; + this._markButtonTogglesForCheck(); + } + + private _markButtonTogglesForCheck() { + if (this._buttonToggles) { + this._buttonToggles.forEach((toggle) => toggle._markForCheck()); + } } } @@ -464,4 +471,15 @@ export class MatButtonToggle implements OnInit, OnDestroy { ngOnDestroy(): void { this._removeUniqueSelectionListener(); } + + /** + * Marks the button toggle as needing checking for change detection. + * This method is exposed because the parent button toggle group will directly + * update bound properties of the radio button. + */ + _markForCheck() { + // When group value changes, the button will not be notified. Use `markForCheck` to explicit + // update button toggle's status + this._changeDetectorRef.markForCheck(); + } }