Я показываю элементы из arraylist в таблице на веб-странице. Я хочу убедиться, что, как только пользователь нажмет "удалить данные", элемент в таблице немедленно удаляется, поэтому пользователю не нужно обновляться и ждать, чтобы увидеть новую таблицу. Так что я делаю это, удаляя элемент из arraylist, ниже приведен код:
$scope.list= function(Id) {
var position = $scope.list.indexOf(fooCollection.findElementById({Id:Id}));
fooCollection.delete({Id:Id});
if (position>-1) {
$scope.list.splice(position,1);
}
$location.path('/list');
};
Но я всегда всегда -1, поэтому последний элемент всегда удаляется из списка независимо от того, какой элемент я удалю.
Мне показалось странным, что мы работаем в двух разных списках, поэтому я предположил, что вы взяли копию исходного списка. Это позволило мне воспроизвести вашу ошибку. В следующей строке вы пытаетесь найти объект, которого нет в списке.
var position = $scope.list.indexOf(fooCollection.findElementById({Id:Id}));
Хотя мы говорим о том же контенте, эти два объекта не совпадают, потому что:
indexOf сравнивает searchElement с элементами массива с использованием строгого равенства (тот же метод, который используется оператором === или triple-equals, operator).
Таким образом, ваша проблема решена. Вы можете увидеть, как это воспроизведено на этом плунжере.
Исправление этого быстрого пути означало бы зацикливание над вашим $ scope.list и выяснение того, какой элемент на самом деле имеет идентификатор, который передается.
вы можете использовать метод splice javascript, который принимает два параметра
arrayObject.splice(param1, param2);
param1 → из этого элемента индекса начнет удалять
param2 → no элементов будет удалено
например, если вы хотите удалить только первый элемент, а ваш объект массива - arrayObject, тогда мы можем написать код следующим образом:
arrayObject.splice(0, 1);
splice
будет принимать три параметра. Третий, чтобы вставить в то же место, где вы удаляете. Плюс splice
для arrays
не для objects