-
Notifications
You must be signed in to change notification settings - Fork 27.5k
ng-repeat doesn't work if template is included by templateUrl #2151
Comments
I updated the fiddle to use the latest version: http://jsfiddle.net/eaNNf/13/ yes, this is a bug. the compilation of this template results in:
|
with jquery present the exception is not thrown but the template doesn't render either. the exceptions comes from ngRepeat, when it calls cursor.after:
|
I have a similar issue: for me, the template renders once, but doesn't update when the model changes. See http://stackoverflow.com/questions/16160549/transcluded-element-not-being-deleted-on-removal-of-list-item-when-using-ng-repe |
I hit this issue today with Angular 1.0.6 ... good times debugging it. Now that I found this issue I suppose it might not be as valuable, but I made a reduced testcase too: http://plnkr.co/edit/5FkhDZsE6hbd7g8k0HGv?p=preview In all versions up through 1.1.3, the first button on that page fails to add any elements to the ng-repeat (because cursor.after(clone) fails, since cursor is not in the DOM tree!). In 1.1.4 after the major refactoring to ng-repeat, the first button in my example fails for a different reason - elements are inserted but in the wrong order. The first element of the array is always rendered last in the ng-repeat. @IgorMinar any chance you can try to revisit fixing this? |
Hi, Just to throw my hat in the ring. I'm also having the same problem mentioned: Renders once, but the data-bindings/scope disappear. I'm inserting the template into the DOM dynamically and then compiling it using $compile. If I navigate away and then back, it works, so I assume the $templateCache comes into effect and everything is a'okay. This would be a very powerful fix for modularity. Thanks for any help! |
I am running into this as well. Please add my vote to the list of people who want to see this fixed. Thanks! |
I was hit by this too. Please add my vote as well. I have also created a Plunker: |
+1 in my case i'm dynamically rendering a template into bootstrap popup. Other ng stuff works just not ng-repeat.
Edit: |
I am hit by this one too. It make me sick for hours ! Thanks to everyone who tries to fix it. |
Also hit this one today, it's a bit baffling. For those who may have not realized it yet: it's because your ng-repeat is on the root element in your directive's template. Wrap your ng-repeat in any element and it'll be fine. |
I ran into this issue and verified it for both 1.1.5 and 1.0.7, but in the specific combination of 1.1.5: http://plnkr.co/edit/tr6X6PGnqAFbJwiSm7GK?p=preview I should note, my app works properly if I remove the filter, or remove the custom directive, or even removing jQuery (bafflingly enough). My plnkr examples will work correctly if you use As far as I can tell, what is happening is that Angular is not setting the appropriate binding initially and thus cannot clean up the old references. In my app I am working on, I am doing
Switching to Edit: On further investigation, the culprit has something to do with the success callback with |
Same problem here. Within a directive using a template, with a ng-repeat. It only happens only chrome. Firefox and IE9 have no problem. |
+1 for this issue - just hit it with a nested repeater in the body of an angular-ui tab. Thanks for the workaround ihsw. |
I stumbled into this bug too. Putting the html into a template: instead of a templateUrl: did the trick. Had me scratching my head for a few hours. |
Is someone woking on this? Looking at the lib code it seems it might be the way compileTemplateUrl fetches the template async and how it deals with the cache. I think some test-case code might help: index.html <!doctype html>
<html lang="en-us" data-ng-app="app">
<head>
<meta charset="utf-8">
<title>Test</title>
</head>
<body>
<div>
<input type="text" data-ng-model="search" placeholder="Search" />
<ul>
<li data-customtag
data-value="{{ item }}"
data-ng-repeat="item in ['Ana', 'Aline', 'Maria', 'Zelia'] | filter:search">
</li>
</ul>
</div>
<!-- version 1.2.0-rc2 -->
<script type="text/javascript" src="vendor/angular/angular.js"></script>
<script type="text/javascript">
var app = angular.module('app', []);
app.directive( 'customtag', function () {
return {
restrict: 'A',
scope: { value: '@' },
templateUrl: 'partials.html'
}
});
</script>
</body>
</html> partials.html <span>{{ value }}</span> Meanwhile the workaround I am using is to wrap he custom directive and apply ng-repeat to the wrapper. |
I saw this error transiently (~30% of the time) on The workaround mentioned above about applying |
It turns out that the problem also affects |
I'm running into the same issue with v1.2.0-rc.3 |
Same here. |
Same issue here |
Okay, works for me in 1.2.1 |
Confirm. Is seems like in 1.2.1 ng-repeat works as expected. |
This should be working in |
👏👏👏 |
I'm running into the same issue with angular 1.2.5. It is working but ng-click is not working properly.
I am checking in browser inspector. It looks like everything is good. Like this |
There are all sorts of issues with table content templates... Here's an example http://plnkr.co/edit/KS10iuML7r2rLvMAHHA8?p=preview ... watch in the web console, if The non-replacing template (similar to your example above) works correctly, if and only if table content is actually valid in the element using the directive (eg, SO, I'm curious to see a reproduction of this, because it would be interesting if you are using a perfectly valid table content parent for that directive and still having the issues you mention (because if you are, then there may be an actual bug) |
I am getting "internal server error" in Plunker. I don't know why. I created A plunker example. So you can see the problem. http://plnkr.co/edit/iji9jbZPxfq5B9w7kOpA?p=preview |
@muhammedea you mean because it shows up in the webconsole as "{{column}}" rather than the column ID you're expecting? If that's the case, the reason is because it just parses an expression, it doesn't interpolate the expression... If you change it to just |
Yes, it is exactly what I mean. I changed the code like you sad. It worked. Thanks. |
Interpolation of attributes happens at a specific priority now, which may have incidentally happened before ngClick prior to 1.2 --- Just a guess, but that's probably the most likely reason why you notice the change now. |
@btford can you please look at http://stackoverflow.com/questions/21419368/angularjs-typeerror-cannot-call-method-insertbefore-of-null , if this is related to above issue, please reopen |
just now, trying @ihsw suggestion to wrap it in a div seems to work. How do we explain this? |
Another example of this, I think here with this issue in angular-deckgrid.
<div data-ng-repeat="column in columns" class="{{layout.classList}}">
<div data-ng-repeat="card in column" data-ng-include="cardTemplate"></div>
</div> |
+1 still seeing issues in 1.2.1 with ng-repeat on the templated directive. |
Had this issue with 1.2.1. Updated to 1.2.18 and it seems to be working now. |
Same issue with 1.2.17 when use jQuery |
Still seeing issues with this ( |
I have a similar problem and I wonder if there is a connection to this bug. I tested it with version up to angular 1.5. I have a template loaded with I found some easy workarounds but I'd really like to avoid them:
|
I looked into it a bit, but it doesn't seem to be easy to fix. I'm afraid it's one of the corner-cases with |
+1 |
Still not working with Angular 1.5.0 and up as @davemecha described. Even the workaround does not work in my case. |
Removing replace:true also worked for me. Going forward I'd suggest we avoid using it, even if it isn't technically depreacted. |
Hi everyone,
i can't tell if its a bug or a feature, but when i tried to outsource my directive templates into own files i stumbled across an strange behaviour.
If the template has a ng-repeat on its root element it works fine as long the template is inline in the directive. If i put the template in an own file and specify the url in the templateUrl, ng-repeat doesn't work.
The problem is that i need to have the ng-repeat in the root element.
I made a fiddle for demonstration: http://jsfiddle.net/eaNNf/11/
update:
I found a workaround for this problem:
Instead of: templateUrl: 'template.html'
i write: template: $templateCache.get('template.html')
The text was updated successfully, but these errors were encountered: