Есть контроллер:
App.controller('AppCtrl', ['$scope', '$http', function($scope, $http) {
$scope.sortFunc = function (a, b) {
if (a.id> b.id) {
return 1;
}
if (a.id< b.id) {
return -1;
}
return 0;
};
$scope._url = "";
$scope._login = "";
$scope._password = "";
$scope.data = [];
/*
$scope.data = [
{id: 1, url: "http://example.org", login: "user", password: "12345"},
{id: 2, url: "http://example2.org", login: "user2", password: "12345"},
...
]
*/
if(localStorage["data"]){
$scope.data = JSON.parse(localStorage["data"]);
$scope.data.sort($scope.sortFunc);
}
$scope.Delete = function(id){
if(!id){
return;
}
var idObject = $scope.data.find({"id": id});
if(!idObject){
return;
}
$scope.data = $scope.data.exclude({"id": id});
idObject = null;
console.log("Delete item with id:", id);
}
$scope.Add = function(){
var tempArr = $scope.data;
tempArr = tempArr.sort($scope.sortFunc);
var inc = 1;
if(tempArr.length > 0){
var lastItem = tempArr.last();
inc = lastItem.id+1;
}
$scope.data.push({
id: inc,
url: $scope._url,
login: $scope._login,
password: $scope._password
});
$scope.data.sort($scope.sortFunc);
$scope._url = "";
$scope._login = "";
$scope._password = "";
console.log("Add item with id:", inc);
}
$scope.$watch(
'data',
function(newVal, oldVal, scope){
if(newVal.length < 0){
return;
}
localStorage["data"] = JSON.stringify($scope.data);
console.log(newVal);
},
true
);
}]);
В $scope.$watch newVal содержит $scope.data массив. И соответственно сохранение в localStorage происходит при изменении любого элемента массива.
Можно как-то получить значение текущего измененного свойства объекта в этом массиве? Мне нужно сделать проверку не пустое ли оно, чтобы не сохранять пустые значения в массив.
Более подробно можно глянуть исходник тут:
github
Временное демо тут:
демо