diff --git a/packages/forms/src/directives/shared.ts b/packages/forms/src/directives/shared.ts index 0d853f84fc..c261a9a44d 100644 --- a/packages/forms/src/directives/shared.ts +++ b/packages/forms/src/directives/shared.ts @@ -99,9 +99,9 @@ function setUpBlurPipeline(control: FormControl, dir: NgControl): void { } function updateControl(control: FormControl, dir: NgControl): void { + dir.viewToModelUpdate(control._pendingValue); if (control._pendingDirty) control.markAsDirty(); control.setValue(control._pendingValue, {emitModelToViewChange: false}); - dir.viewToModelUpdate(control._pendingValue); control._pendingChange = false; } diff --git a/packages/forms/test/template_integration_spec.ts b/packages/forms/test/template_integration_spec.ts index b19bd8ae3f..783045f6f6 100644 --- a/packages/forms/test/template_integration_spec.ts +++ b/packages/forms/test/template_integration_spec.ts @@ -1472,36 +1472,6 @@ import {NgModelCustomComp, NgModelCustomWrapper} from './value_accessor_integrat expect(required.nativeElement.getAttribute('pattern')).toEqual(null); })); - it('should update control status', fakeAsync(() => { - const fixture = initTest(NgModelChangeState); - const inputEl = fixture.debugElement.query(By.css('input')); - const inputNativeEl = inputEl.nativeElement; - const onNgModelChange = jasmine.createSpy('onNgModelChange'); - fixture.componentInstance.onNgModelChange = onNgModelChange; - fixture.detectChanges(); - tick(); - - expect(onNgModelChange).not.toHaveBeenCalled(); - - inputNativeEl.value = 'updated'; - onNgModelChange.and.callFake((ngModel: NgModel) => { - expect(ngModel.invalid).toBe(true); - expect(ngModel.value).toBe('updated'); - }); - dispatchEvent(inputNativeEl, 'input'); - expect(onNgModelChange).toHaveBeenCalled(); - tick(); - - inputNativeEl.value = '333'; - onNgModelChange.and.callFake((ngModel: NgModel) => { - expect(ngModel.invalid).toBe(false); - expect(ngModel.value).toBe('333'); - }); - dispatchEvent(inputNativeEl, 'input'); - expect(onNgModelChange).toHaveBeenCalledTimes(2); - tick(); - })); - }); describe('IME events', () => { @@ -1839,17 +1809,6 @@ class NgModelChangesForm { log() { this.events.push('fired'); } } -@Component({ - selector: 'ng-model-change-state', - template: ` - - ` -}) -class NgModelChangeState { - onNgModelChange = () => {}; -} - function sortedClassList(el: HTMLElement) { const l = getDOM().classList(el); l.sort();