Skip to content

Commit a418397

Browse files
committed
fix: corrected var/# parsing in template
Closes angular#2084
1 parent ab8eb4f commit a418397

File tree

2 files changed

+21
-17
lines changed

2 files changed

+21
-17
lines changed

modules/angular2/src/change_detection/parser/parser.ts

Lines changed: 10 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -538,19 +538,17 @@ class _ParseAST {
538538
this.optionalCharacter($COLON);
539539
var name = null;
540540
var expression = null;
541-
if (this.next !== EOF) {
542-
if (keyIsVar) {
543-
if (this.optionalOperator("=")) {
544-
name = this.expectTemplateBindingKey();
545-
} else {
546-
name = '\$implicit';
547-
}
548-
} else if (!this.peekKeywordVar()) {
549-
var start = this.inputIndex;
550-
var ast = this.parsePipe();
551-
var source = this.input.substring(start, this.inputIndex);
552-
expression = new ASTWithSource(ast, source, this.location);
541+
if (keyIsVar) {
542+
if (this.optionalOperator("=")) {
543+
name = this.expectTemplateBindingKey();
544+
} else {
545+
name = '\$implicit';
553546
}
547+
} else if (this.next !== EOF && !this.peekKeywordVar()) {
548+
var start = this.inputIndex;
549+
var ast = this.parsePipe();
550+
var source = this.input.substring(start, this.inputIndex);
551+
expression = new ASTWithSource(ast, source, this.location);
554552
}
555553
ListWrapper.push(bindings, new TemplateBinding(key, keyIsVar, name, expression));
556554
if (!this.optionalCharacter($SEMICOLON)) {

modules/angular2/test/change_detection/parser/parser_spec.ts

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -447,7 +447,7 @@ export function main() {
447447
function keyValues(templateBindings) {
448448
return ListWrapper.map(templateBindings, (binding) => {
449449
if (binding.keyIsVar) {
450-
return '#' + binding.key + (isBlank(binding.name) ? '' : '=' + binding.name);
450+
return '#' + binding.key + (isBlank(binding.name) ? '=null' : '=' + binding.name);
451451
} else {
452452
return binding.key + (isBlank(binding.expression) ? '' : `=${binding.expression}`)
453453
}
@@ -471,7 +471,7 @@ export function main() {
471471
expect(bindings).toEqual([]);
472472
});
473473

474-
iit('should parse a string without a value', () => {
474+
it('should parse a string without a value', () => {
475475
var bindings = parseTemplateBindings('a');
476476
expect(keys(bindings)).toEqual(['a']);
477477
});
@@ -508,7 +508,7 @@ export function main() {
508508

509509
it('should detect names as value', () => {
510510
var bindings = parseTemplateBindings("a:#b");
511-
expect(keyValues(bindings)).toEqual(['a', '#b']);
511+
expect(keyValues(bindings)).toEqual(['a', '#b=\$implicit']);
512512
});
513513

514514
it('should allow space and colon as separators', () => {
@@ -540,10 +540,16 @@ export function main() {
540540

541541
it('should support var/# notation', () => {
542542
var bindings = parseTemplateBindings("var i");
543-
expect(keyValues(bindings)).toEqual(['#i']);
543+
expect(keyValues(bindings)).toEqual(['#i=\$implicit']);
544544

545545
bindings = parseTemplateBindings("#i");
546-
expect(keyValues(bindings)).toEqual(['#i']);
546+
expect(keyValues(bindings)).toEqual(['#i=\$implicit']);
547+
548+
bindings = parseTemplateBindings("var a; var b");
549+
expect(keyValues(bindings)).toEqual(['#a=\$implicit', '#b=\$implicit']);
550+
551+
bindings = parseTemplateBindings("#a; #b;");
552+
expect(keyValues(bindings)).toEqual(['#a=\$implicit', '#b=\$implicit']);
547553

548554
bindings = parseTemplateBindings("var i-a = k-a");
549555
expect(keyValues(bindings)).toEqual(['#i-a=k-a']);

0 commit comments

Comments
 (0)