Использование сервисов для установки и получения элементов внутри контроллера в AngularJS

#angularjs #ionic-framework

#angularjs #ionic-framework

Вопрос:

У меня есть сервис, который имеет две функции setItems() и GetItems(). Я использую функцию GetItems () для получения массива элементов, а также функцию setItems() для динамической установки массива элементов из контроллера.

 .service('ItemService', ['$http', function ($http) {
   var items = [{'id': '1', 'item_id': '1', 'item_name': 'Tomato', 'type_name': 'Vegitables','nos':'0'}, {'id': '2', 'item_id': '2', 'item_name': 'onion', 'type_name': 'Vegitables','nos':'0'}];
   return {
        getItems: function () {
        return items;
        },
       setItems: function (value) {
       items = value;
       }
   };
  }]);
  

Моя функция контроллера заключается в следующем

  .controller('aLLITEMSCtrl', ['$scope', '$stateParams', '$location', 'ItemService', '$timeout', 
function ($scope, $stateParams, $location, ItemService, $timeout) {
    var data = {};
    $scope.data = data;
    $timeout(function () {                    
        $scope.items = ItemService.getItems(); 
    }, 0);
   $scope.set_item_nos = function (type, index) {
       angular.forEach($scope.data.item[index], function (value, key) {
       if (key == 'nos') {
            $scope.data.item[index].nos = parseInt(value)   1;
       } 
       });
      ItemService.setItems($scope.data.item);
   }
   $scope.goCart = function () {
       $timeout(function () {
           $scope.items = ItemService.getItems();
       }, 0);
      $location.path('/yourcart');
  }
  }])
  

Здесь я использую GetItems() для получения массива элементов. а также я увеличиваю nos из другой функции, а затем вызываю setItems(), чтобы снова установить элементы массива. Все работает нормально, как и ожидалось, я могу перейти к home и вернуться к тому же контроллеру, тогда и последнее присвоенное значение массива items будет таким же.

как я могу изначально установить массив элементов с помощью ajax-запроса? Мне нужно что-то вроде

 .service('ItemService', ['$http', function ($http) {
    var url =  'http://localhost/app/item/get/item';        
    var items = $http.get(url).then(function (response)  
                return response.data;
                });                   
    return {
       getItems: function () {
       return items;
       },
      setItems: function (value) {
      items = value;
      }
    };
    }]);
  

Я пробовал это, но если я изначально устанавливаю массив элементов с помощью запроса $ http каждый раз, когда я вызываю этот контроллер, массив элементов инициализируется ответом. но я хочу установить его только один раз, когда я вошел в контроллер. Затем я могу использовать метод setItems для динамического изменения этого массива.

Я новичок в AngularJS. Любая помощь будет заметна

Комментарии:

1. вы можете добавить другой метод в свой сервис для инициализации элементов. и вызовите его при запуске контроллера.