【问题标题】:AngularJS: How to run code before ng-repeat starts?AngularJS:如何在 ng-repeat 开始之前运行代码?
【发布时间】:2014-05-21 23:22:20
【问题描述】:

我在我创建的两个自定义指令上有 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 发生变化时(例如,通过外部作用域),我需要在触发node 的ng-repeat 之前清空specialNodesArray

如何在 ng-repeat 开始之前运行代码?还有另一种方法吗?我做的整个事情都错了吗?

谢谢!

【问题讨论】:

  • 你在说什么变化?添加/删除节点或属性版本或两者?
  • 为什么不能使用currentNode in nodesArray | filter:{isSpecial:true} 而不是构造specialNodesArray
  • 您的代码有点难以理解。但如果将nodesArray 设置为新值,只需将specialNodesArray 设置为[]。 Angular 为您完成了剩下的工作......
  • 不确定 node 指令是否是填充特殊节点数组的正确位置。要么按照@dfsq 的建议使用过滤器并废弃特殊节点数组,要么在控制器中填充特殊节点数组。
  • 嗨,更改是可以插入到绑定的“specialNodesArray”集合中的特殊节点。不幸的是,我不能使用“过滤器”,因为第二个 ng-repeat 连接到“specialNodesArray”集合,当新的 指令实例具有“isSpecial = true”时可以更改它。

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


【解决方案1】:

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

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

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

优先级 - 当在单个 DOM 上定义多个指令时 元素,有时需要指定 指令被应用。优先级用于对指令进行排序 在调用他们的编译函数之前。优先级定义为 数字。首先编译具有更高数值优先级的指令。 具有相同优先级的指令的顺序未定义。这 默认优先级为 0。

【讨论】:

  • 这个答案的问题在于他没有问那个问题。他问是否有办法在 ng-repeat 循环开始时执行代码,但在第一个条目被处理到 DOM 之前。
猜你喜欢
  • 2023-03-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-23
  • 1970-01-01
  • 1970-01-01
  • 2021-10-08
  • 1970-01-01
相关资源
最近更新 更多