AngularJS:如何在编译之前获取ng-repeat指令模板
AngularJS : How to get ng-repeat directive template before it gets compiled?
我试图获得ng-repeat指令的初始html模板,这是在我的自定义指令中使用的,它包含嵌套的内容。但是实际的html文本是在指令中设置的,我得到的要么是已经编译好的ng-repeat指令,要么是简单的注释,看起来像下面这样:
<!-- ngRepeat: item in items -->
我已经在github上问过这个问题,但不幸的是答案对我来说不是很清楚。有没有办法得到ng-repeat指令模板之前,它得到编译?
这里有一个简单的例子,我正在努力实现(和一个plnkr):
app.directive('parent', function() {
return {
restrict:'E',
template:'<div ng-transclude></div>',
transclude: true,
priority: 1001,
scope: true,
compile: function(element, attrs) {
console.log(element.html());
console.log(element);
}
};
});
<parent>
<div ng-repeat="item in items">
{{item}}
</div>
</parent>
ng-repeat
指令具有' transclude: "element",因此,当它被编译时,整个元素被从DOM中取出(为transclude做准备)并留下注释。
所以,第一个console.log(element.html())
不会看到任何东西,因为你自己的指令的传输没有发生。
但是,即使在链接时检查内部HTML, ngRepeat
将被编译,但它的transclusion尚未发生;当ngRepeat
的scope.$watchCollection
着火时,它就会发生。
因此,查看内容的唯一方法是抢占ngRepeat
的编译。您可以将parent
指令改为terminal: true
,检查内容并手动重新编译。
你也可以添加一个指令,运行在一个优先级高于ngRepeat
的可重复元素上,并获取内容。
(您甚至可以重用"ngRepeat"
名称)
app.directive("ngRepeat", function(){
return {
require: "?^parent", // optionally require your parent
priority: 1010,
compile: function(tElem){
var template = tElem.html();
return function link(scope, element, attrs, ctrls){
var parentCtrl = ctrls;
if (!parentCtrl) return;
// hand it off to the parent controller
parentCtrl.setTemplate(template);
}
}
}
})
相关文章:
- angularJS从ng-repeat获取类名
- 如何获取 ng-repeat 输入 angularjs 的值
- 获取 ng-init 和 ng-repeat 中的元素
- 从数据库中获取数据,并在 AngularJS 中的 ng-repeat 中使用它
- 如何在AngularJS(ng-repeat)中获取选定的单选按钮数据
- 角度 - 在不使用 ng-repeat的情况下获取数据长度
- Angular - ng-repeat - 获取 1 个列表中的所有 json 子数据
- 使用 ng-repeat获取具有不同名称的嵌套对象的值
- 如何在使用 ng-repeat(ng-repeat)时获取元素的正确高度和偏移值
- 如何将特定信息从外部 API 获取到我的 ng-repeat
- 使用角度 js 获取 ng-repeat 内的总和值
- 使用子 slug ng-repeat获取父项的值
- 获取 Angular JS 中单选按钮中选中的单选按钮的值,该值为 ng-repeat
- 如何使用 ng-repeat 和过滤器来获取 JSON 数据
- 如何使用数据 ng-repeat获取从 A 到 Z 的索引值
- 使用Angular ng-repeat获取数组的最后一个索引
- 使用ng-repeat获取值的键
- 如何使用angularjs ng-repeat获取json键
- 从ng-repeat获取变量到javascript
- Angular指令中的ng-repeat获取预编译值