Skip to content

Commit

Permalink
fix(accessor): ngModel conflits with nested inputs (#18976)
Browse files Browse the repository at this point in the history
fixes #18248
  • Loading branch information
manucorporat authored Aug 6, 2019
1 parent 7cd68b5 commit 6bbdb80
Show file tree
Hide file tree
Showing 8 changed files with 37 additions and 25 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -25,8 +25,8 @@ export class BooleanValueAccessor extends ValueAccessor {
setIonicClasses(this.el);
}

@HostListener('ionChange', ['$event.target.checked'])
_handleIonChange(value: any) {
this.handleChangeEvent(value);
@HostListener('ionChange', ['$event.target'])
_handleIonChange(el: any) {
this.handleChangeEvent(el, el.checked);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ export class NumericValueAccessor extends ValueAccessor {
super(el);
}

@HostListener('ionChange', ['$event.target.value'])
_handleIonChange(value: any) {
this.handleChangeEvent(value);
@HostListener('ionChange', ['$event.target'])
_handleIonChange(el: any) {
this.handleChangeEvent(el, el.value);
}

registerOnChange(fn: (_: number | null) => void) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ export class RadioValueAccessor extends ValueAccessor {
super(el);
}

@HostListener('ionSelect', ['$event.target.checked'])
_handleIonSelect(value: any) {
this.handleChangeEvent(value);
@HostListener('ionSelect', ['$event.target'])
_handleIonSelect(el: any) {
this.handleChangeEvent(el, el.checked);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ export class SelectValueAccessor extends ValueAccessor {
super(el);
}

@HostListener('ionChange', ['$event.target.value'])
_handleChangeEvent(value: any) {
this.handleChangeEvent(value);
@HostListener('ionChange', ['$event.target'])
_handleChangeEvent(el: any) {
this.handleChangeEvent(el, el.value);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -20,8 +20,8 @@ export class TextValueAccessor extends ValueAccessor {
super(el);
}

@HostListener('ionChange', ['$event.target.value'])
_handleInputEvent(value: any) {
this.handleChangeEvent(value);
@HostListener('ionChange', ['$event.target'])
_handleInputEvent(el: any) {
this.handleChangeEvent(el, el.value);
}
}
22 changes: 13 additions & 9 deletions angular/src/directives/control-value-accessors/value-accessor.ts
Original file line number Diff line number Diff line change
Expand Up @@ -16,18 +16,22 @@ export class ValueAccessor implements ControlValueAccessor {
setIonicClasses(this.el);
}

handleChangeEvent(value: any) {
if (value !== this.lastValue) {
this.lastValue = value;
this.onChange(value);
handleChangeEvent(el: HTMLElement, value: any) {
if (el === this.el.nativeElement) {
if (value !== this.lastValue) {
this.lastValue = value;
this.onChange(value);
}
setIonicClasses(this.el);
}
setIonicClasses(this.el);
}

@HostListener('ionBlur')
_handleBlurEvent() {
this.onTouched();
setIonicClasses(this.el);
@HostListener('ionBlur', ['$event.target'])
_handleBlurEvent(el: any) {
if (el === this.el.nativeElement) {
this.onTouched();
setIonicClasses(this.el);
}
}

registerOnChange(fn: (value: any) => void) {
Expand Down
6 changes: 6 additions & 0 deletions angular/test/test-app/e2e/src/inputs.e2e-spec.ts
Original file line number Diff line number Diff line change
Expand Up @@ -60,4 +60,10 @@ describe('inputs', () => {
expect(await element(by.css('#select-note')).getText()).toEqual('playstation');
expect(await element(by.css('#range-note')).getText()).toEqual('20');
});

it('nested components should not interfere with NgModel', async () => {
expect(await element(by.css('#range-note')).getText()).toEqual('10');
await element(by.css('#nested-toggle')).click();
expect(await element(by.css('#range-note')).getText()).toEqual('10');
});
});
4 changes: 3 additions & 1 deletion angular/test/test-app/src/app/inputs/inputs.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -93,7 +93,9 @@

<ion-item color="dark">
<ion-label>Range Mirror</ion-label>
<ion-range [(ngModel)]="range"></ion-range>
<ion-range [(ngModel)]="range">
<ion-toggle slot="start" id="nested-toggle" [(ngModel)]="toggle"></ion-toggle>
</ion-range>
<ion-note slot="end">{{range}}</ion-note>
</ion-item>

Expand Down

0 comments on commit 6bbdb80

Please sign in to comment.