您可以为此编写一个指令,它只需使用属性给定的名称将 (jqLite) 元素分配给范围。
这是指令:
app.directive("ngScopeElement", function () {
var directiveDefinitionObject = {
restrict: "A",
compile: function compile(tElement, tAttrs, transclude) {
return {
pre: function preLink(scope, iElement, iAttrs, controller) {
scope[iAttrs.ngScopeElement] = iElement;
}
};
}
};
return directiveDefinitionObject;
});
用法:
app.directive("myDirective", function() {
return {
template: '<div><ul ng-scope-element="list"><li ng-repeat="item in items"></ul></div>',
link: function(scope, element, attrs) {
scope.list[0] // scope.list is the jqlite element,
// scope.list[0] is the native dom element
}
}
});
一些备注:
- 由于嵌套指令的编译和链接顺序,您只能
scope.list
从myDirective
s postLink-Function 访问,无论如何您很可能会使用它
ngScopeElement
使用 preLink 函数,以便嵌套在元素中的指令ng-scope-element
已经可以访问scope.list
- 不确定这在性能方面的表现如何