From 99a2f96633318b2a159aa779529c6a96e4811744 Mon Sep 17 00:00:00 2001 From: Joey Perrott Date: Mon, 25 Sep 2017 15:19:08 -0700 Subject: [PATCH] Ensure the `checked` property of the slide toggle and its `NgModel` accessor are updated before change event is emitted. --- src/lib/slide-toggle/slide-toggle.spec.ts | 13 +++++++++++++ src/lib/slide-toggle/slide-toggle.ts | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/src/lib/slide-toggle/slide-toggle.spec.ts b/src/lib/slide-toggle/slide-toggle.spec.ts index 14794ab96555..bc93f9e8258c 100644 --- a/src/lib/slide-toggle/slide-toggle.spec.ts +++ b/src/lib/slide-toggle/slide-toggle.spec.ts @@ -100,6 +100,19 @@ describe('MdSlideToggle without forms', () => { expect(slideToggle.checked).toBe(true); }); + fit('should update the checked value before firing an event', () => { + let changed: number = 0; + let checked: number = 0; + + spyOn(slideToggle.change, 'emit').and.callFake(() => changed = performance.now()); + spyOnProperty(slideToggle, 'checked', 'set').and.callFake(() => checked = performance.now()); + + labelElement.click(); + fixture.detectChanges(); + + expect(checked).toBeLessThan(changed); + }); + it('should not trigger the click event multiple times', () => { // By default, when clicking on a label element, a generated click will be dispatched // on the associated input element. diff --git a/src/lib/slide-toggle/slide-toggle.ts b/src/lib/slide-toggle/slide-toggle.ts index 114bf16e3184..a4c2498d8688 100644 --- a/src/lib/slide-toggle/slide-toggle.ts +++ b/src/lib/slide-toggle/slide-toggle.ts @@ -253,8 +253,8 @@ export class MdSlideToggle extends _MdSlideToggleMixinBase implements OnDestroy, let event = new MdSlideToggleChange(); event.source = this; event.checked = this.checked; - this.change.emit(event); this.onChange(this.checked); + this.change.emit(event); } _onDragStart() {