我正在尝试使用 AngularJS 创建一种拖放 Playground 。 代码在 plunker 上。要理解这个问题,大多数情况下您需要看到骗子。
https://plnkr.co/edit/i82UOOqHRSJyEPN9293E
我正在尝试在这里创建类似节点的结构,可以将其拖到右侧的 Playground 上。
拖动时,我将节点 ID 添加到 $scope
中的 nodeChain
变量。
现在,我使用 ng-repeat
迭代 UI 中的 nodeChain
数组,在其中绘制节点只是为了检查添加到链中的节点是否正确反射(reflect)。
但是,
- 我没有看到
watchCollection
日志中的nodeChain
更新,并且添加新节点时,在 Playground 上绘制的节点也没有更新。
有人可以告诉我为什么绑定(bind)没有生效吗?
提前致谢!
最佳答案
您需要触发 $digest
周期来更新值。当 $digest 循环开始时,它会触发每个观察者。这些观察者检查示波器模型的当前值是否与上次计算的值不同。如果是,则执行相应的监听函数。因此,如果 View 中有任何表达式,它们将被更新。
if (!Bounds.within(event.pageX, event.pageY, leftPane)) {
scope.$parent.nodeChain.push(NodeChain.getNodeFromId(attr.nid))
scope.$apply();
}
工作中的笨蛋:https://plnkr.co/edit/SNNsVOZps5Fy35dAQIqk?p=preview
您在控制台中收到 ng-repeat dupes 错误,因为数组 nodeChain
中存在重复值。
关于javascript - 无法在数组上进行双向数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44733288/