Angular JS:我怎样才能加载工厂一次?

时间:2016-07-26 08:26:30

标签: javascript angularjs

我正在使用静态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);
    };
});

2 个答案:

答案 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);
    });