【发布时间】:2014-05-21 23:22:20
【问题描述】:
我在我创建的两个自定义指令上有 ng-repeat - 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 发生变化时(例如,通过外部作用域),我需要在触发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