我对我创建的两个自定义指令进行了重复 - node
和specialNode
:
<node data="currentNode" specialNodes="specialNodesArray"
ng-repeat="currentNode in nodesArray">
</node>
<specialNode ng-repeat="currentNode in specialNodesArray">
</specialNode>
每个node
都是一个指令,这是它的链接函数:
if (scope.data.isSpecial) {
scope.specialNodes.push( {data: scope.data, jqueryElement: element});
}
这是控制器的代码,其中包含nodes
和specialNodesArray
成员:
// The main nodes array
$scope.nodesArray = [
{id: "1", title: "node1", isSpecial: true},
{id: "2", title: "node2", isSpecial: false},
{id: "3", title: "node3", isSpecial: true}
];
// The special nodes array which is build
$scope.specialNodesArray= [ ];
nodesArray
和specialNodesArray
已关联 - specialNodesArray
是在node
指令中构建的。
specialNodesArray
处的每个项目都包含创建的node
(在第一次ng-repeat处创建)的原始数据,并且还保存其jquery元素(我们需要它以供以后使用,用于滚动动画)。
问题是当nodesArray
发生更改时(例如,通过外部作用域),我需要在触发specialNodesArray
的ng-repeat之前清空node
。
如何在ng-repeat开始之前运行代码?有另一种方式吗?我完全错了吗?
谢谢!
答案 0 :(得分:0)
根据documentation,ng-repeat指令在优先级1000执行。
因此,如果您希望首先执行与ng-repeat相同的元素的指令,请将其设为优先级:1001。
.directive('specialNode', [function(){
return {
restrict: 'E',
priority: 1001,
...
}
}]
优先级 - 在单个DOM上定义了多个指令时 元素,有时需要指定其中的顺序 指令适用。优先级用于对指令进行排序 在调用它们的编译函数之前。优先级定义为a 数。首先编译具有更高数字优先级的指令。 具有相同优先级的指令的顺序是未定义的。该 默认优先级为0。