我需要访问ng-repeat
的结果,我发现我可以使用transclude
函数并手动编译。但问题是它不能使用2个地方并且元素有ng-repeat
。我的代码是这样的:
return {
restrict: 'E',
require: '?ngModel',
template: 'HTML'
transclude: true,
replace: true,
link: function(scope, element, attrs, ngModelCtrl, $transclude) {
var caption = element.find('.caption');
var dropdown = element.find('.dropdown-menu');
$transclude(function(clone) {
//var clone_clone = clone.addClass('ng-hide');
//$compile(clone.contents())(scope.$new()).appendTo(caption);
$compile(clone)(scope.$new()).appendTo(dropdown);
$compile(clone)(scope.$new()).appendTo(caption);
});
}
};
当我只运行一次编译但在第二次编译时抛出异常时,我会尝试clone()
同时使用contents()
和transclude: 'element'
。我怎样才能做到这一点?我需要与ng-transclude
具有相同的行为(ng-translcude
不能与ng-repeat
一起使用,因为在内部链接中我有一个元素而不是元素列表。)
更新:用法:
<dropdown>
<li><a>foo</a></li>
<li><a>bar</a></li>
<li><a>baz</a></li>
</dropdown>
<dropdown>
<li ng-repeat="item in items"><a>{{item.label}}</a></li>
</dropdown>
答案 0 :(得分:0)
所以我需要的是两次调用transclude:
$transclude(function(clone) {
$compile(clone)(scope.$new()).appendTo(caption);
});
$transclude(function(clone) {
$compile(clone)(scope.$new()).appendTo(dropdown);
});