Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 16.12.2015, 14:27
LCH LCH вне форума
Интересующийся
Отправить личное сообщение для LCH Посмотреть профиль Найти все сообщения от LCH
 
Регистрация: 31.07.2012
Сообщений: 13

Функция добавления в сервисе
Здравствуйте!

Учу Ангуляр и разрабатываю по ходу маленькое приложение.

Есть список элементов, они все в сервисе. так же в сервис хочу добавить функции по добавлению, удалению и т.д. элементов. А в контролере уже их просто вызывать. Удалять получается, а вот добавить нет, поэтому прошу помощи.

Код сервиса:
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 (обьект с пустыми параметрами), но вот после добавления, толи потому, что передаем аргумент в тело функции, то ли даже не знаю почему... никак не получается ее обнулить.
Ответить с цитированием
  #2 (permalink)  
Старый 19.12.2015, 12:34
Профессор
Отправить личное сообщение для krasovsky Посмотреть профиль Найти все сообщения от krasovsky
 
Регистрация: 21.12.2012
Сообщений: 869

Вероятно потому, что фабрика созданная .factory('myfactory') - это синглтон, простой объект который хранится в потрошках ангуляра и в отличие от контроллера не переинициализируется.

При этом ты хранишь все добавленые итемы в этой фабрике, а твой инпут хранит ссылку на этот итем в этой фабрике, и соответственно выводит его.
Ответить с цитированием
  #3 (permalink)  
Старый 29.12.2015, 20:08
Новичок на форуме
Отправить личное сообщение для shur777 Посмотреть профиль Найти все сообщения от shur777
 
Регистрация: 13.05.2014
Сообщений: 3

LCH, скорее всего ты уже всё знаешь , но если вопрос остался открыт:
$scope.addItem = function(index) {
 itemsFactory.addItem(index);
};
Передавай не объект (т.к. объект передается по ссылке), а копию объекта.
А затем, очищай модель привязанную к инпуту:
$scope.addItem = function(index) {
 itemsFactory.addItem(angular.copy(index));
 $scope.newItem.name = '';
};
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
После добавления контента. Не работает функция. Как сделать рабочей? makarow.dmitry jQuery 0 26.12.2014 00:57
js рекурсивная функция с for.. in циклом frying Общие вопросы Javascript 6 25.08.2014 10:50
не вызывается функция при изменении option soft4you Общие вопросы Javascript 1 23.07.2014 17:41
AJAX функция для новых html-элементов broadcast77 AJAX и COMET 25 03.03.2014 14:01
Где вызывается функция? cradis Общие вопросы Javascript 5 23.04.2011 13:47