From 4556532c26ab0a3e2c60c48d1f3d70d2bb887a33 Mon Sep 17 00:00:00 2001 From: Xander Garbett Date: Sat, 11 Nov 2017 08:40:17 +0000 Subject: [PATCH] feat(core): add binding name to content changed error (#20352) Adding the binding name to the error message recieved by the user gives extra context on what exactly changed. The tests are also updated to reflect the new error message. PR Close #20352 --- packages/core/src/view/util.ts | 5 +++-- packages/core/test/view/component_view_spec.ts | 2 +- packages/core/test/view/embedded_view_spec.ts | 2 +- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/packages/core/src/view/util.ts b/packages/core/src/view/util.ts index dae387cb9f..90d1580c2a 100644 --- a/packages/core/src/view/util.ts +++ b/packages/core/src/view/util.ts @@ -98,9 +98,10 @@ export function checkBindingNoChanges( view: ViewData, def: NodeDef, bindingIdx: number, value: any) { const oldValue = view.oldValues[def.bindingIndex + bindingIdx]; if ((view.state & ViewState.BeforeFirstCheck) || !devModeEqual(oldValue, value)) { + const bindingName = def.bindings[def.bindingIndex].name; throw expressionChangedAfterItHasBeenCheckedError( - Services.createDebugContext(view, def.nodeIndex), oldValue, value, - (view.state & ViewState.BeforeFirstCheck) !== 0); + Services.createDebugContext(view, def.nodeIndex), `${bindingName}: ${oldValue}`, + `${bindingName}: ${value}`, (view.state & ViewState.BeforeFirstCheck) !== 0); } } diff --git a/packages/core/test/view/component_view_spec.ts b/packages/core/test/view/component_view_spec.ts index 2ccba8ed1a..3f073ec7ff 100644 --- a/packages/core/test/view/component_view_spec.ts +++ b/packages/core/test/view/component_view_spec.ts @@ -132,7 +132,7 @@ const addEventListener = '__zone_symbol__addEventListener'; value = 'v2'; expect(() => Services.checkNoChangesView(view)) .toThrowError( - `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'v1'. Current value: 'v2'.`); + `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'a: v1'. Current value: 'a: v2'.`); }); it('should support detaching and attaching component views for dirty checking', () => { diff --git a/packages/core/test/view/embedded_view_spec.ts b/packages/core/test/view/embedded_view_spec.ts index 9ad1556b07..f0da7901f1 100644 --- a/packages/core/test/view/embedded_view_spec.ts +++ b/packages/core/test/view/embedded_view_spec.ts @@ -145,7 +145,7 @@ import {compViewDef, compViewDefFactory, createAndGetRootNodes, createEmbeddedVi childValue = 'v2'; expect(() => Services.checkNoChangesView(parentView)) .toThrowError( - `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'v1'. Current value: 'v2'.`); + `ExpressionChangedAfterItHasBeenCheckedError: Expression has changed after it was checked. Previous value: 'name: v1'. Current value: 'name: v2'.`); }); it('should destroy embedded views', () => {