Angular JS: как я могу загрузить фабрику только один раз?

0

Я использую статический json файл для моделирования моего сервера и получения от него массива заказов. Я представляю заказы в таблице в моем html файле с возможностью удаления из него. Каждый раз, когда я загружаю html файл, весь список загружается, а заказы я удаляю через функцию контроллера.

Как я могу отключить данные с фабрики только один раз?

Вот мой контроллер:

app.controller("MainPageCtrl", function($scope, getOrdersFactory)
{
    $scope.orders = [];
    // Getting the data frm the facrory
    var dataPromise = getOrdersFactory.getDataFunc();
    dataPromise.then(function(data){
            $scope.orders = data.orders;
    });

    // Deletes an orders.
    $scope.deleteOrder = function(order){
    // Finds the index of the order.
    var orderIndex = $scope.orders.indexOf(order);

    // Delete the order.
    $scope.orders.splice(orderIndex, 1);
    };
});
  • 0
    Что именно ты имеешь ввиду? Однажды в ... что? Хотите сохранить некоторые данные в кеше браузера?
  • 0
    См. Stackoverflow.com/questions/22182730/… .
Теги:

2 ответа

0

Я думаю, вы теряете свои данные, т.е. $ scope.orders. Если это сценарий, просто измените

  dataPromise.then(function(data){
            $scope.orders = data.orders;
    });

в

  dataPromise.then(function(data){
            $scope.orders = angular.copy(data.orders);
    });
0

По умолчанию угловые службы и заводы - это синглтоны (загружаются только один раз). Проблема, с которой вы сталкиваетесь, связана с повторной инициализацией контроллера. Когда происходит изменение маршрута, контроллер повторно инициализируется, чтобы получить предыдущее значение с завода.

Вы можете использовать функцию setter на вашем "getOrdersFactory".

Предполагая, что ваш 'getOrdersFactory' будет

app.factory('getOrdersFactory',function(){
 //code to read from file and set the file on a variable orderDetails
 var orderDetails = contentsReadFromFile;  
 return{
  getDataFunc:function(){
   return orderDetails
  },
  setDataFunc:function(modifiedOrderDetails){
   orderDetails = modifiedOrderDetails;
   //code to set the new content to the static file
  }
 }
}

код для чтения файла из статического файла будет отображаться при первом запуске фабрики, а на вашем контроллере задаются детали заказа в функции удаления

// Deletes an orders.
$scope.deleteOrder = function(order){
// Finds the index of the order.
var orderIndex = $scope.orders.indexOf(order);

// Delete the order.
$scope.orders.splice(orderIndex, 1);
getOrdersFactory.setDataFunc($scope.orders);
};

Ещё вопросы

Сообщество Overcoder
Наверх
Меню