Функция добавления в сервисе
Здравствуйте!
Учу Ангуляр и разрабатываю по ходу маленькое приложение. Есть список элементов, они все в сервисе. так же в сервис хочу добавить функции по добавлению, удалению и т.д. элементов. А в контролере уже их просто вызывать. Удалять получается, а вот добавить нет, поэтому прошу помощи. Код сервиса: angular.module('items').factory('itemsFactory', function () { var items = {}; items.list = [ //список обьектов ]; items.addItem = function(newItem) { items.list.push(newItem); } items.deleteItem = function(index){ items.list.splice(index, 1); }; return items; }); Конроллер: angular.module('main').controller('itemCtrl', function($scope, itemsFactory) { $scope.items = itemsFactory.list; $scope.deleteItem = function(index) { itemsFactory.deleteItem(index); }; $scope.addItem = function(index) { itemsFactory.addItem(index); }; HTML: <form name="itemsForm" novalidate ng-controller="itemCtrl" ng-submit="addItem(newItem)"> <input ng-model="newItem.name" > <input type="submit" value="+" > </form> Проблема в том, что после добавления поле инпута должно очищаться, чтобы можно было добавить еще элемент, но вот как не бьюсь - не могу это сделать :( Храню в отдельных файлах. Пробовал создавать переменную для newItem (обьект с пустыми параметрами), но вот после добавления, толи потому, что передаем аргумент в тело функции, то ли даже не знаю почему... никак не получается ее обнулить. |
Вероятно потому, что фабрика созданная .factory('myfactory') - это синглтон, простой объект который хранится в потрошках ангуляра и в отличие от контроллера не переинициализируется.
При этом ты хранишь все добавленые итемы в этой фабрике, а твой инпут хранит ссылку на этот итем в этой фабрике, и соответственно выводит его. |
LCH, скорее всего ты уже всё знаешь :), но если вопрос остался открыт:
$scope.addItem = function(index) { itemsFactory.addItem(index); };Передавай не объект (т.к. объект передается по ссылке), а копию объекта. А затем, очищай модель привязанную к инпуту: $scope.addItem = function(index) { itemsFactory.addItem(angular.copy(index)); $scope.newItem.name = ''; }; |
Часовой пояс GMT +3, время: 01:38. |