Когда вы вызываете функцию save, или ещё при каких-то загадочных обстоятельствах, angular заносит во все элементы массивов $$hashKey. Поэтому, при незнании этого, иногда можно написать какую-нибудь функцию, работа которой может быть нарушена, к примеру поиск через underscore, когда указывается объект полностью:
var groupIndex = _.indexOf($scope.groups, _.findWhere($scope.groups, {id:groupId, name:groupName}));
Я например внутри функции save вызываю функцию $scope.selfClean(), в которую предварительно пишу полную фильтрацию всех данных скопа, которую я также вызываю при загрузке элементов (мало ли что там придет от источника информации). Лично я в $$hashKey вообще не нуждаюсь, поэтому просто вырезаю их с объектов.
Далее ещё прикол, от JavaScript, пример реализации которого можно найти на стековерфлоу
Краткая суть: я фильтрую нежелательные элементы в скопе и удаляю их через
delete $scope.something[index]
Если я после этого сделаю console.log($scope.something), то увижу что-то вроде
[{…}, {…}, … {…}, null, null, null]
Очень простой трюк помогает убрать эти нулы:
$scope.somethingDoubleBuffer = $scope.something;
$scope.something = [];
for (e in $scope.somethingDoubleBuffer) {
$scope.something.push($scope.somethingDoubleBuffer[e]);
};
delete $scope.somethingDoubleBuffer;
Не знаю как я до этого додумался, просто случайно обнаружил во время тестирования.