AngularJS:如何在ng-repeat开始之前运行代码?

时间:2014-01-13 14:28:41

标签: javascript angularjs angularjs-ng-repeat ng-repeat

我对我创建的两个自定义指令进行了重复 - nodespecialNode

   <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});
}

这是控制器的代码,其中包含nodesspecialNodesArray成员:

// 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= [ ];

nodesArrayspecialNodesArray已关联 - specialNodesArray是在node指令中构建的。 specialNodesArray处的每个项目都包含创建的node(在第一次ng-repeat处创建)的原始数据,并且还保存其jquery元素(我们需要它以供以后使用,用于滚动动画)。

问题是当nodesArray发生更改时(例如,通过外部作用域),我需要在触发specialNodesArray的ng-repeat之前清空node

如何在ng-repeat开始之前运行代码?有另一种方式吗?我完全错了吗?

谢谢!

1 个答案:

答案 0 :(得分:0)

根据documentation,ng-repeat指令在优先级1000执行。

因此,如果您希望首先执行与ng-repeat相同的元素的指令,请将其设为优先级:1001。

.directive('specialNode', [function(){
    return {
        restrict: 'E',
        priority: 1001,
        ...
    }
}]
  

优先级 - 在单个DOM上定义了多个指令时   元素,有时需要指定其中的顺序   指令适用。优先级用于对指令进行排序   在调用它们的编译函数之前。优先级定义为a   数。首先编译具有更高数字优先级的指令。   具有相同优先级的指令的顺序是未定义的。该   默认优先级为0。