Skip to content

Commit

Permalink
WIP: Fix tranclusion issues with ngRepeat, angular#4002
Browse files Browse the repository at this point in the history
  • Loading branch information
jeffbcross committed Sep 21, 2013
1 parent f12c61e commit 8284bcb
Show file tree
Hide file tree
Showing 3 changed files with 47 additions and 18 deletions.
4 changes: 3 additions & 1 deletion src/ng/compile.js
Original file line number Diff line number Diff line change
Expand Up @@ -809,6 +809,8 @@ function $CompileProvider($provide) {
compileNode = $compileNode[0];
replaceWith(jqCollection, jqLite(sliceArgs($template)), compileNode);

$template.append(document.createComment(' end ' + directiveName + ': ' + templateAttrs[directiveName] + ' '))

childTranscludeFn = compile($template, transcludeFn, terminalPriority,
replaceDirective && replaceDirective.name);
} else {
Expand Down Expand Up @@ -836,7 +838,7 @@ function $CompileProvider($provide) {
compileNode = $template[0];

if ($template.length != 1 || compileNode.nodeType !== 1) {
throw $compileMinErr('tplrt', "Template for directive '{0}' must have exactly one root element. {1}", directiveName, '');
throw $compileMinErr('tplrt', "Template for directive '{0}' must have exactly one root element. {1}", directiveName, templateAttrs[directiveName] +'');
}

replaceWith(jqCollection, $compileNode, compileNode);
Expand Down
2 changes: 2 additions & 0 deletions src/ng/directive/ngRepeat.js
Original file line number Diff line number Diff line change
Expand Up @@ -328,6 +328,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {
if (lastBlockMap.hasOwnProperty(key)) {
block = lastBlockMap[key];
$animate.leave(block.elements);
dump(block.elements);
forEach(block.elements, function(element) { element[NG_REMOVED] = true});
block.scope.$destroy();
}
Expand Down Expand Up @@ -371,6 +372,7 @@ var ngRepeatDirective = ['$parse', '$animate', function($parse, $animate) {

if (!block.startNode) {
linker(childScope, function(clone) {
dump(clone);
$animate.enter(clone, null, jqLite(previousNode));
previousNode = clone;
block.scope = childScope;
Expand Down
59 changes: 42 additions & 17 deletions test/ng/directive/ngRepeatSpec.js
Original file line number Diff line number Diff line change
Expand Up @@ -843,28 +843,54 @@ describe('ngRepeat', function() {
});
});

it('should grow multi-node repeater', inject(function($compile, $rootScope) {
$rootScope.show = false;
$rootScope.books = [
{title:'T1', description: 'D1'},
{title:'T2', description: 'D2'}
];
element = $compile(

describe('ngRepeatStart', function () {
it('should grow multi-node repeater', inject(function($compile, $rootScope) {
$rootScope.show = false;
$rootScope.books = [
{title:'T1', description: 'D1'},
{title:'T2', description: 'D2'}
];
element = $compile(
'<div>' +
'<dt ng-repeat-start="book in books">{{book.title}}:</dt>' +
'<dd ng-repeat-end>{{book.description}};</dd>' +
'</div>')($rootScope);

$rootScope.$digest();
expect(element.text()).toEqual('T1:D1;T2:D2;');
$rootScope.books.push({title:'T3', description: 'D3'});
$rootScope.$digest();
expect(element.text()).toEqual('T1:D1;T2:D2;T3:D3;');
}));


iit('should not clobber ng-if when updating collection', inject(function ($compile, $rootScope) {
$rootScope.values = [1, 2, 3];
$rootScope.showMe = true;

element = $compile(
'<div>' +
'<dt ng-repeat-start="book in books">{{book.title}}:</dt>' +
'<dd ng-repeat-end>{{book.description}};</dd>' +
'</div>')($rootScope);
'<div ng-repeat-start="val in values">Value: {{val}} </div>' +
'<div ng-if="showMe" ng-repeat-end>If : {{val}}</div>' +
'</div>'
)($rootScope);

$rootScope.$digest();
expect(element.text()).toEqual('T1:D1;T2:D2;');
$rootScope.books.push({title:'T3', description: 'D3'});
$rootScope.$digest();
expect(element.text()).toEqual('T1:D1;T2:D2;T3:D3;');
}));
$rootScope.$digest();
expect(element.find('div').length).toBe(6);

$rootScope.values.shift();
$rootScope.values.push(5);

$rootScope.$digest();
dump(element);
expect(element.find('div').length).toBe(6);
expect(element.text()).not.toContain('If : 1');
}));
});
});


describe('ngRepeat animations', function() {
var body, element, $rootElement;

Expand Down Expand Up @@ -982,5 +1008,4 @@ describe('ngRepeat animations', function() {
item = $animate.flushNext('move').element;
expect(item.text()).toBe('1');
}));

});

0 comments on commit 8284bcb

Please sign in to comment.