fix(change_detection): convert interpolated null values to empty strings
Fixes #3007 Closes #3271
This commit is contained in:
parent
16493e9769
commit
345fa521dd
|
@ -371,7 +371,7 @@ export class ChangeDetectorJITGenerator {
|
|||
for (var i = 0; i < r.args.length; ++i) {
|
||||
res += JSON.stringify(r.fixedArgs[i]);
|
||||
res += " + ";
|
||||
res += this._localNames[r.args[i]];
|
||||
res += `${UTIL}.s(${this._localNames[r.args[i]]})`;
|
||||
res += " + ";
|
||||
}
|
||||
res += JSON.stringify(r.fixedArgs[r.args.length]);
|
||||
|
|
|
@ -151,4 +151,6 @@ export class ChangeDetectionUtil {
|
|||
}
|
||||
|
||||
static isValueBlank(value: any): boolean { return isBlank(value); }
|
||||
|
||||
static s(value: any): string { return isPresent(value) ? `${value}` : ''; }
|
||||
}
|
||||
|
|
|
@ -302,6 +302,15 @@ export function main() {
|
|||
expect(val.dispatcher.log).toEqual(['propName=BvalueA']);
|
||||
});
|
||||
|
||||
it('should output empty strings for null values in interpolation', () => {
|
||||
var val = _createChangeDetector('interpolation', new TestData('value'));
|
||||
val.changeDetector.hydrate(new TestData(null), null, null, null);
|
||||
|
||||
val.changeDetector.detectChanges();
|
||||
|
||||
expect(val.dispatcher.log).toEqual(['propName=BA']);
|
||||
});
|
||||
|
||||
it('should escape values in literals that indicate interpolation',
|
||||
() => { expect(_bindSimpleValue('"$"')).toEqual(['propName=$']); });
|
||||
|
||||
|
|
|
@ -94,6 +94,19 @@ export function main() {
|
|||
});
|
||||
}));
|
||||
|
||||
it('should update text node with a blank string when interpolation evaluates to null',
|
||||
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||
tcb.overrideView(MyComp, new viewAnn.View({template: '<div>{{null}}{{ctxProp}}</div>'}))
|
||||
.createAsync(MyComp)
|
||||
.then((rootTC) => {
|
||||
rootTC.componentInstance.ctxProp = null;
|
||||
|
||||
rootTC.detectChanges();
|
||||
expect(rootTC.nativeElement).toHaveText('');
|
||||
async.done();
|
||||
});
|
||||
}));
|
||||
|
||||
it('should consume element binding changes',
|
||||
inject([TestComponentBuilder, AsyncTestCompleter], (tcb: TestComponentBuilder, async) => {
|
||||
tcb.overrideView(MyComp, new viewAnn.View({template: '<div [id]="ctxProp"></div>'}))
|
||||
|
|
Loading…
Reference in New Issue