2015-06-17 2 views
0

У меня проблема с моими операциями CRUD в сервисе. Когда я нажимаю на Create Btn, он создает объект, но он не нажимает объект в списке таблиц.Как определить операции CRUD в службе (AngularJS)

Ctrl (где список таблицы):

$scope.nameslist = CrudService.getAll(); 

Ctrl (для модального диалога):

$scope.createItem = function (newObj) { 
    CrudService.create(newObj); 
    $scope.newObj = null; 
    $scope.ok(); 
} 

CRUD Service (это .factory):

... 
return { 
    getAll: function() { 
     return resService.names.query(); 
    }, 

    create: function (newObj) { 
     resService.names.save(newObj); 
     //this.getAll.push(newObj); //this doesn't work 
    } 
... 

Запрос Обслуживание (также.. Обстановка):

... 
return { 
    names: $resource(baseUrl + '/api/names/:Id', { 
     Id: '@Id' 
    }, { 
    'update': { 
      method: 'PUT' 
    } 
    }) 
... 

Может ли кто-нибудь мне помочь? Как я могу нажать новый объект в списке таблиц?

+0

либо вы толкнуть свой новый элемент вручную или вызвать функцию GETALL снова, чтобы получить обновленный элемент из сервер. – Chandermani

ответ

2

После того как вы создали объект, вы можете нажать на объект в списке или позвонить GETALL

$scope.createItem = function (newObj) { 
    CrudService.create(newObj); 
    $scope.newObj = null; 
    $scope.ok(); 
    \\either 
    $scope.nameslist = CrudService.getAll(); 
    \\or 
    $scope.nameslist.push(newObj); // this assumes this is an array 
} 

UPDATE /// $ широковещательный отправляет сообщения вниз к дочерним контроллерам в то время как $ испускают отправляет их. используя $ rootscope. $ Испускают первый закачивать его в контроллер

.controller('myCtrl' ['$scope', '$rootscope', function($scope, $rootscope ... 

, то вы можете использовать $rootscope.$emit('added-Name') или вы даже можете добавить аргумент так $rootscope.$emit('added-Name', {newObj: newobj})

затем в улавливающей контроллер

$rootscope.$on('added-Name'), function(event, args) { 
    $scope.namelist.push(args.newObj); 
    //or if you're not passing the argument 
    $scope.nameslist = CrudService.getAll(); 
}); 

используя общую услугу:

angular.module('myApp').service('sharedService', function(){ 
    var nameList = []; 
    return{ 
     get: function(){ 
      return nameList; 
     } 
     set: function(val){ 
      nameList = val; 
     } 
     add: function(name){ 
      nameList.push(name); 
     } 
    } 
}) 

впрыскивать sharedservice в контроллер `.controller ('Ctrl', [ '$ области действия', 'sharedService', функция ($ области видимости, sharedService ....

заполнить в списке имен службы с sharedService.set(CrudService.getAll()); и $ scope.createItem вы могли бы sharedService.add(newObj);

, то вы можете иметь часы на sharedService.get()

$scope.$watch(function() { 
      return sharedService.get(); 
     }, function(newValue, OldValue) { 

      if (newValue !== OldValue) { 
       $scope.namesList = sharedService.get(); 
      } 
     }); 
+0

Это хорошая практика? Я думал, что это будет определено в сервисе ?! – yuro

+0

получить? затем используйте getAll(). Это лучший способ, поскольку вы поддерживаете синхронизацию с сервером. Я просто продемонстрировал, что вы можете добавить объект прямо в свой список. –

+0

no Я имею в виду '$ scope.nameslist.push (newObj)' Есть ли возможность определить это в сервисе? – yuro

Смежные вопросы