我正在使用angular,我试图创建一个“全选”按钮。indexof - 检查一个值是否已经在javascript数组中)
我有一个项目列表,每个项目都有一个切换,我正在做的是,在变化(每次切换从真(选择)变为假(未选定),我运行一个函数来创建一个数组与
所选元素的所有ID。这工作几乎是完美的,问题是我面临的indexfOf方法的一些问题,以检查是否ID已在数组中。
var isInArray;
isInArray = function(arr, id) {
console.log("index of ", arr.indexOf(id));
return arr.indexOf(id);
};
scope.evtSelectAll = function() {
return angular.forEach(scope.listToDisplay, function(element) {
element.copyTo = true;
return scope.selectFromList(element.iID, element.copyTo);
});
};
scope.selectFromList = function(id, copy) {
if (copy === true && isInArray(scope.selected, id) === -1) {
scope.selected.push(id);
} else {
scope.selected.pop(id);
}
console.log("scope.selected - ", scope.selected);
if (scope.selected.length > 0) {
console.log("Emitted event: can proceed!");
scope.$emit('enough-elements');
} else {
console.log("Emitted event: can not proceed!");
scope.$emit('not-enough-elements');
}
return scope.result = scope.selected;
};
的我得到的问题是当数组(scope.selected)有多个ID时
比方说,例如,我的scope.selected看起来像这样:
scope.selected = [2,3,4,7]
如果我点击全选,没有被添加(这是正确的)
现在,让我们说我勾去掉4和7例如,我的scope.selected现在看起来是这样的:
scope.selected = [2,3]
如果我现在点击全选,我的结果如下:[2,4,7]。
我失去了
我认为这是由于这样的事实,我的数组没有一个单一的项目?
感谢您的任何帮助。这里还有一个快速的codepen来解释这个问题。如果您检查控制台并使用切换进行播放,您应该能够立即看到我所指的内容。
在此先感谢
如果完全清空$ scope.selected,并且一旦发生切换,通过重新分析列表中选中的元素来重新创建它会是一个问题吗? –
不,我不明白为什么它应该是一个诚实的问题。我只需要小心地将它清空,只是选择我猜的全部,对吧? – Nick
至少在codepen示例中,'element.iID'应改为'element.id' – Matthias