我正在使用静态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)
默认情况下,角度服务和工厂是单例(仅加载一次)。您面临的问题是控制器重新初始化。当路线改变发生时,控制器被重新初始化,以便从工厂获得先前的值。
您可以在'getOrdersFactory'上使用setter函数。
假设你的'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);
};
答案 1 :(得分:0)
我猜你正在丢失你的数据,即 $ scope.orders 。如果这是场景只是改变
dataPromise.then(function(data){
$scope.orders = data.orders;
});
到
dataPromise.then(function(data){
$scope.orders = angular.copy(data.orders);
});