Я использую статический 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);
};
});
Я думаю, вы теряете свои данные, т.е. $ scope.orders. Если это сценарий, просто измените
dataPromise.then(function(data){
$scope.orders = data.orders;
});
в
dataPromise.then(function(data){
$scope.orders = angular.copy(data.orders);
});
По умолчанию угловые службы и заводы - это синглтоны (загружаются только один раз). Проблема, с которой вы сталкиваетесь, связана с повторной инициализацией контроллера. Когда происходит изменение маршрута, контроллер повторно инициализируется, чтобы получить предыдущее значение с завода.
Вы можете использовать функцию 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);
};