我有一个指令,它复制了一些 html,其中包括一个控制器和一个 ng-repeat。我编译 html 并将其粘贴到 dom 中。我可以看到新的 html 正在获取新编译的控制器的范围,但如果数据是异步加载的,那么 ng-repeat 将不起作用。
我创建了一个 plunker http://plnkr.co/edit/jCjW26PCwlmKVTohja0s?p=preview,它显示了我遇到的问题。
索引.html
<div class="parent-div">
<div class="put-compiled-data-in-here" compile-html>
<!-- copied html goes in here -->
</div>
<div ng-controller="CopiedController" class="copy blue">
<h1>{{name}}</h1>
<div ng-repeat="p in projects">
<h1>{{p.name}}</h1>
</div>
</div>
</div>
控制器
app.controller('CopiedController', function($scope, slowService){
$scope.projects = slowService.loadSlowData();
$scope.name = "Inside Copied Controller";
});
复制和编译 html 的指令
app.directive('compileHtml', function ($compile, $rootScope, $parse) {
return {
restrict: 'A',
link: function (scope, ele, attrs) {
var html = jQuery('.copy').clone().removeClass('.blue').addClass('.pink');
var el = angular.element(html);
ele.append(el);
$compile(ele.contents())(scope);
}
};
});
慢速服务(又名 ajax):
app.service('slowService', function($timeout) {
this.loadSlowData = function() {
return $timeout(function() {
return [{name:"Part 2a"},
{name:"Part 2b" } ]
}, 300);
};
});
任何帮助将不胜感激。