我无法让$compile
手动使用ng-repeat
。这里有一个类似的问题:$compile编译的ngRepeat不起作用,但它不能解决这里的问题,因为我在作用域上手动调用$digest
,但它仍然不起作用。
我所指的代码在这里:
js:
angular.module('myApp', []);
angular.module('myApp').directive('test', ['$compile', '$rootScope', '$timeout',
function ($compile, $rootScope, $timeout) {
var myScope = $rootScope.$new();
myScope.numbers = [1, 2, 3];
var html = '<div ng-repeat="number in numbers">{{ number }}</div>';
var html2 = '<div>{{ numbers }}</div>';
var returnObject = $compile(html)(myScope);
$timeout(function () {
myScope.$digest();
console.log(returnObject);
});
return {};
}
]);
html:
<html ng-app="myApp">
<head>
...
</head>
<body>
<h1 test>Hello Plunker!</h1>
</body>
</html>
指向plunker的链接:http://plnkr.co/edit/RC1EILu16GPr0MGmSpcb?p=preview
如果将html
变量切换为html2
,它将按预期进行插值并返回对象。但在它的当前状态下,我希望得到一个包含1、2、3。。。
在内部,ng repeat的工作原理是将元素添加到指令的父元素中。调用ng repeat.编译后的ng repeat没有可添加其元素的父元素,因此无法工作。
添加父div(Plunk)
var html = '<div><div ng-repeat="number in numbers">{{ number }}</div></div>';
var html2 = '<div>{{ numbers }}</div>';
var returnObject = $compile(html)(myScope);
$timeout(function () {
myScope.$digest();
console.log(returnObject.children());