簡體   English   中英

如何在角度js中將數據從工廠傳遞到控制器?

[英]How to pass data from factory to controller in angular js?

我有一個工廠包含保存客戶功能 。成功我想在控制器中傳遞其響應,以便我可以更新視圖。

sampleApp.factory("authFactory", function($location, $http, transformRequestAsFormPost) {
return {
    saveCustomer: function(data) {
        var request = $http({
            method: "post",
            url: "webservice/ws.php?mode=saveCustomer",
            transformRequest: transformRequestAsFormPost,
            data: data
        });
        request.success(
            function(response) {
            console.log(response);
            }
        );
      }
   };
}); 

調節器

sampleApp.controller('customerController', function($scope, testService,authFactory,$http) {
$scope.addCustomer = function() {
    var data = {name: $scope.customerName,city: $scope.customerCity};
    // Calling Factory Function
    authFactory.saveCustomer(data);
    // How to fetch response here       
   }
});

請幫我解決這個問題謝謝

各種方式,首先想到的是這樣的:

//in your factory
return {
   saveCustomer: function(data) {
       var request = $http({...});

       return request;
   }
}

//in your controller
authFactor
  .saveCustomer(data)
  .success(function() {
    //update controller here
  })

你在這里工作“ 承諾 ”。 根據您從服務方法返回的內容,您可以執行一些不同的操作。

您可以做的一件事就是返回承諾並在控制器中處理它。

服務:

return {
    saveCustomer: function(data) {
        return $http({...});
   }
}

位指示:

authFactor.saveCustomer(data).success(function(customer) {
    $scope.customer = customer;
})

您可以做的另一件事是返回一個對象引用並將其放在您的范圍上。 填充對象后,它將在您的范圍內更新。

服務:

return {
   saveCustomer: function(data) {
       var customer = {};
       $http({...}).success(function(data){
           angular.copy(data, customer);
       });
       return customer;
   }
}

控制器:

$scope.customer = authFactor.saveCustomer(data);

第二種方式的優點是大多數邏輯都保留在您的服務中。 你的控制器保持簡單,不必知道承諾或處理它們。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM