Я пытаюсь сохранить объект в LocalStorage, но когда я запускаю setItem
, его хранят два объекта (дубликат). Ниже приведены мои коды;
HTML
<form class="clearBoth" ng-submit="addProject(projectInfo)">
<div class="list" ng-model="projectInfo">
<label class="item item-input item-stacked-label">
<span class="input-label">Project Name</span>
<input type="text" ng-model="projectInfo.name" placeholder="PSN" required>
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Host</span>
<input type="text" ng-model="projectInfo.host" placeholder="http://psn.com.my" required>
</label>
<label class="item item-input item-stacked-label">
<span class="input-label">Instance</span>
<input type="text" ng-model="projectInfo.instance" placeholder="PSN" required>
</label>
</div>
<button class="button button-block button-positive" ng-click="addProject(projectInfo)">Block Button</button>
<button class="button button-block button-assertive" ng-click="removeProject()">Block Button</button>
</form>
контроллер
.controller("ProjectAddCtrl", function($scope) {
$scope.addProject = function (projectInfo) {
var oldItems = JSON.parse(localStorage.getItem('itemsArray')) || [];
$scope.projects = [{
name: "",
host: "",
instance: ""
}];
oldItems.push(projectInfo);
localStorage.setItem('itemsArray', JSON.stringify(oldItems));
};
$scope.removeProject = function () { localStorage.clear(); };
console.log(JSON.parse(localStorage.getItem('itemsArray')));
})
Оба ng-click
на <button>
и ng-submit
на <form>
запускаются и, следовательно, вы видите, что те же данные добавляются дважды. Вы можете исправить это, добавив атрибут type="button"
на первой кнопке.
Проверить документацию - значение по умолчанию для атрибута type
submit
и, следовательно, запускаются как события click
и submit
.
ng-click="addProject(projectInfo)"
из кнопки и позволитьng-click="addProject(projectInfo)"
работать правильно. Сделав это, кнопка ytpe не разрешает отправку с клавиатуры