From 730cccdc973e5f4e2b2c34a095f1cd100eabb50f Mon Sep 17 00:00:00 2001 From: Adam Bradley Date: Sat, 20 Feb 2016 21:59:43 -0600 Subject: [PATCH] feat(toggle): add change event Related #5513 --- ionic/components/checkbox/checkbox.ts | 12 +++---- ionic/components/toggle/test/basic/index.ts | 17 +++++++--- ionic/components/toggle/test/basic/main.html | 12 +++---- ionic/components/toggle/toggle.ts | 33 ++++++++++++++------ 4 files changed, 47 insertions(+), 27 deletions(-) diff --git a/ionic/components/checkbox/checkbox.ts b/ionic/components/checkbox/checkbox.ts index 9bbd050882..bcb2d8dad1 100644 --- a/ionic/components/checkbox/checkbox.ts +++ b/ionic/components/checkbox/checkbox.ts @@ -62,8 +62,8 @@ const CHECKBOX_VALUE_ACCESSOR = new Provider( providers: [CHECKBOX_VALUE_ACCESSOR] }) export class Checkbox { - private _checked: any = false; - private _disabled: any = false; + private _checked: boolean = false; + private _disabled: boolean = false; private _labelId: string; private _fn: Function; @@ -105,11 +105,11 @@ export class Checkbox { * @input {boolean} whether or not the checkbox is checked (defaults to false) */ @Input() - get checked() { + get checked(): boolean { return this._checked; } - set checked(val) { + set checked(val: boolean) { this._setChecked(isTrueProperty(val)); this.onChange(this._checked); } @@ -154,11 +154,11 @@ export class Checkbox { * @input {boolean} whether or not the checkbox is disabled or not. */ @Input() - get disabled(): any { + get disabled(): boolean { return this._disabled; } - set disabled(val: any) { + set disabled(val: boolean) { this._disabled = isTrueProperty(val); this._item && this._item.setCssClass('item-checkbox-disabled', this._disabled); } diff --git a/ionic/components/toggle/test/basic/index.ts b/ionic/components/toggle/test/basic/index.ts index 14930b585e..171c4ad97f 100644 --- a/ionic/components/toggle/test/basic/index.ts +++ b/ionic/components/toggle/test/basic/index.ts @@ -18,8 +18,8 @@ class E2EApp { fruitsForm: ControlGroup; grapeDisabled: boolean; grapeChecked: boolean; - kiwiModel: boolean; - strawberryModel: boolean; + kiwiValue: boolean; + strawberryValue: boolean; formResults: string; constructor() { @@ -32,9 +32,6 @@ class E2EApp { this.grapeChecked = true; this.grapeDisabled = true; - - this.kiwiModel = true; - this.strawberryModel = false; } toggleGrapeChecked() { @@ -45,6 +42,16 @@ class E2EApp { this.grapeDisabled = !this.grapeDisabled; } + kiwiChange(ev) { + console.log('kiwiChange', ev); + this.kiwiValue = ev.checked; + } + + strawberryChange(ev) { + console.log('strawberryChange', ev); + this.strawberryValue = ev.checked; + } + doSubmit(ev) { console.log('Submitting form', this.fruitsForm.value); this.formResults = JSON.stringify(this.fruitsForm.value); diff --git a/ionic/components/toggle/test/basic/main.html b/ionic/components/toggle/test/basic/main.html index 5d537a89a2..731810e576 100644 --- a/ionic/components/toggle/test/basic/main.html +++ b/ionic/components/toggle/test/basic/main.html @@ -28,13 +28,13 @@ - Kiwi, NgModel false, Secondary color - + Kiwi, (change) Secondary color + - Strawberry, NgModel true - + Strawberry, (change) [checked]="true" + @@ -56,8 +56,8 @@ cherry.value: {{fruitsForm.controls.cherryCtrl.value}}
grape.dirty: {{fruitsForm.controls.grapeCtrl.dirty}}
grape.value: {{fruitsForm.controls.grapeCtrl.value}}
- kiwiModel: {{kiwiModel}}
- strawberryModel: {{strawberryModel}}
+ kiwiValue: {{kiwiValue}}
+ strawberryValue: {{strawberryValue}}

diff --git a/ionic/components/toggle/toggle.ts b/ionic/components/toggle/toggle.ts index 351cf33098..826f5b6025 100644 --- a/ionic/components/toggle/toggle.ts +++ b/ionic/components/toggle/toggle.ts @@ -1,4 +1,4 @@ -import {Component, ElementRef, Renderer, Input, Optional, Provider, forwardRef} from 'angular2/core'; +import {Component, ElementRef, Renderer, Input, Output, EventEmitter, Optional, Provider, forwardRef} from 'angular2/core'; import {ControlValueAccessor, NG_VALUE_ACCESSOR} from 'angular2/common'; import {Form} from '../../util/form'; @@ -76,8 +76,8 @@ const TOGGLE_VALUE_ACCESSOR = new Provider( providers: [TOGGLE_VALUE_ACCESSOR] }) export class Toggle implements ControlValueAccessor { - private _checked: any = false; - private _disabled: any = false; + private _checked: boolean = false; + private _disabled: boolean = false; private _labelId: string; private _activated: boolean = false; private _startX: number; @@ -89,6 +89,11 @@ export class Toggle implements ControlValueAccessor { */ id: string; + /** + * @output {Toggle} expression to evaluate when the toggle value changes + */ + @Output() change: EventEmitter = new EventEmitter(); + constructor( private _form: Form, private _elementRef: ElementRef, @@ -170,11 +175,11 @@ export class Toggle implements ControlValueAccessor { } @Input() - get checked(): any { + get checked(): boolean { return this._checked; } - set checked(val: any) { + set checked(val: boolean) { this._setChecked(isTrueProperty(val)); this.onChange(this._checked); } @@ -183,8 +188,11 @@ export class Toggle implements ControlValueAccessor { * @private */ private _setChecked(isChecked: boolean) { - this._checked = isChecked; - this._item && this._item.setCssClass('item-toggle-checked', isChecked); + if (isChecked !== this._checked) { + this._checked = isChecked; + this.change.emit(this); + this._item && this._item.setCssClass('item-toggle-checked', isChecked); + } } /** @@ -213,11 +221,11 @@ export class Toggle implements ControlValueAccessor { registerOnTouched(fn) { this.onTouched = fn; } @Input() - get disabled(): any { + get disabled(): boolean { return this._disabled; } - set disabled(val: any) { + set disabled(val: boolean) { this._disabled = isTrueProperty(val); this._item && this._item.setCssClass('item-toggle-disabled', this._disabled); } @@ -225,7 +233,12 @@ export class Toggle implements ControlValueAccessor { /** * @private */ - onChange(_) {} + onChange(isChecked: boolean) { + // used when this input does not have an ngModel or ngControl + console.debug('toggle, onChange (no ngModel)', isChecked); + this._setChecked(isChecked); + this.onTouched(); + } /** * @private