无法在阵列

时间:2017-06-24 05:55:21

标签: javascript angularjs data-binding

我正在尝试使用AngularJS创建一种拖放操场。 代码在plunker上。要理解这个问题,大多数情况下你需要看到这个问题。

https://plnkr.co/edit/i82UOOqHRSJyEPN9293E

我正在尝试在这里创建类似节点的结构,可以将其拖到右侧的游乐场。

在拖动时,我将节点ID添加到nodeChain中的$scope变量。 现在我正在用nodeChain在UI中迭代ng-repeat数组,我正在绘制节点,以检查添加到链中的节点是否正确反映。

然而,

  1. 我没有看到nodeChain日志中的watchCollection更新以及添加新节点时操场上绘制的节点没有更新。
  2. 有人可以告诉我为什么绑定没有生效?

    提前致谢!

2 个答案:

答案 0 :(得分:1)

您需要触发$ digest周期来更新值。当$digest周期开始时,它会激活每个观察者。这些观察者检查范围模型的当前值是否与上次计算的值不同。如果是,则执行相应的侦听器函数。因此,如果您在视图中有任何表达式,它们将被更新。

  if (!Bounds.within(event.pageX, event.pageY, leftPane)) {
                    scope.$parent.nodeChain.push(NodeChain.getNodeFromId(attr.nid))
                    scope.$apply();
            }

Working Plunker https://plnkr.co/edit/SNNsVOZps5Fy35dAQIqk?p=preview

您的控制台中出现ng-repeat dupes错误,因为数组nodeChain中存在重复值。

答案 1 :(得分:1)

如果我理解你的问题,你想在下面的空格中添加删除的节点。请参阅plunkr

当您更改范围之外的模型时,您应该添加$scope.apply()