【发布时间】:2018-04-11 15:11:19
【问题描述】:
我在屏幕上有一个“添加项目”按钮,当它被点击时,它会将一个新项目添加到列表中。
我使用$scope.$watchCollection 观察返回所有可见项目列表的函数。
当我单击“添加项目”按钮时,我收到了无限摘要循环错误。 似乎 $watchCollection 克隆了列表,然后 newCollection 总是不等于 oldCollection。
JS Bin 演示: https://jsbin.com/mavolecipu/1/edit?html,js,output
function MainController($scope) {
var ctrl = this;
var _index = 1;
var _visibleItems = [];
var _allItems = [];
ctrl.addItem = addItem;
ctrl.visibleItems = [];
$scope.$watchCollection(getVisibleItem, function (newVal, oldVal) {
// it looks like the newVal is always not equal oldVal??
if(newVal!== oldVal){
ctrl.visibleItems = newVal;
}
});
function addItem() {
_allItems.push({
index: _index,
isVisible: true
});
_index = _index+1;
}
function getVisibleItem() {
var newVisibleItems = _(_allItems).filter({isVisible: true}).value();
// use same reference
_visibleItems.length = 0;
_.merge(_visibleItems, newVisibleItems);
return _visibleItems;
}
}
【问题讨论】:
标签: javascript angularjs lodash