ng-repeat with ng-include not working

那年仲夏 提交于 2019-12-03 12:40:28

First make sure that the data that is contained in the first index of items actually has the data that you want.

One possible solution to your problem would be to simply not show the first index of the ng-repeat:

<div ng-repeat="item in items" ng-show="!$first">
   <div ng-include src="'views/template.html'"></div>
</div>

This may not actually tackle the root of your problem, but it may still get your application working a bit more like what you expect.


Another possible solution:

<div ng-repeat="item in items" ng-include="'views/template.html'"></div>

see example here:

http://plnkr.co/edit/Yvd73HiFS8dXvpvpEeFu?p=preview


One more possible fix just for good measure:

Use a component:

html:

<div ng-repeat="item in items">
   <my-include></my-include>
</div>

js:

angular.module("app").directive("myInclude", function() {
return {
    restrict: "E",
    templateUrl: "/views/template.html"
}
})
Blake Bowen

I ran into the same problem, and finally figured out that the first element has not been fetched and compiled in time for the first ng-repeat iteration. Using $templateCache will fix the problem.


You can cache your template in a script tag:
<script type="text/ng-template" id="templateId.html">
    <p>This is the content of the template</p>
</script>


Or in your app's run function:
angular.module("app").run(function($http, $templateCache) {
    $http.get("/views/template.html", { cache: $templateCache });
});


You can also use $templateCache inside your directive, although it's a bit harder to setup. If your templates are dynamic, I would recommend creating a template cache service. This SO question has some good examples of template caching inside a directive and a service:

Using $http and $templateCache from within a directive doesn't return results

Dunc

Using a directive worked for me: https://stackoverflow.com/a/24673257/188926

In your case:

1) define a directive:

angular.module('myApp')
  .directive('mytemplate', function() {
    return {
      templateUrl: 'views/template.html'
    };
  });

2) use your new directive:

<mytemplate />

... or if you're concerned about HTML validation:

<div mytemplate></div>
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!