1

我被教導說我們使用工廠/服務來消除重複編碼。這是一部分工作正常的代碼。爲什麼我們在Angularjs中使用工廠/服務進行ajax調用?

app.controller('ServicesCtrl',['$scope','DataFactory',function($scope,$http,DataFactory){ 

    DataFactory.GetData('services1.json') 
     .then(function(response){ 
     $scope.returnedData = response.data; 
    }) 
     .catch(function(response){ 
     console.log('Error in process',response.status,response.data); 
    }); 
    }]); 

app.controller('ContactCtrl',['$scope','DataFactory', function($scope,DataFactory){ 

    DataFactory.GetData('location.json') 
     .then(function(response){ 
     $scope.returnedData = response.data; 
    }) 
     .catch(function(response){ 
     console.log('Error in process',response.status,response.data); 
    }); 
    }]); 

app.factory('DataFactory',['$http',function($http){ 

    var factory = {}; 

    factory.GetData = function(path) { 
    return $http.get(path); 

    } 
    return factory; 
}]); 

我的問題是1.爲什麼使用服務/廠家做出這樣的AJAX調用的時候,我們必須在內部控制器的承諾的工作?我的意思是,我必須在這兩個控制器中進行相同的調用。然後調用.catch。它的效率在哪裏?有沒有更好的方法來做到這一點?或者我做錯了什麼?是否有可能在工廠內處理這些承諾並將response.data返回給不同的控制器?

+1

這是可能的緩存服務的承諾。否則,JavaScript是單線程的。函數只能返回立即可用的數據或者返回一個* pending * promise,這個promise將在未來的時間被解析完成或被拒絕。 – georgeawg

回答

2

這裏的東西是代碼的可重用性。現在假設您有一項服務稱爲

angular.module('test') 
    .service('testService', function ($http) { 

    this.getBidsUser = function ($username) { 
     var endpoint = "bids/users/"+$username; 

     return $http({ 
     method: 'get', 
     url: endpoint 
     }); 
    }; 

} 

它返回用戶的出價。您可能希望在不同的視圖中使用相同的信息。因此,使用服務是一個好主意,這樣您就不必再次重寫相同的代碼。

再一次,您可能希望在同一服務上擁有所有相同的端點相關服務以實現可維護性。

如果您不使用服務模式,您可能需要更改服務的端點。

Promises arr call backs。如果您在服務內部處理這些承諾,維護呼叫者時間表並不容易。

+0

@Ravi標記如果它有幫助:) –

0

嗨,我們使用工廠和服務

  • ,使應用程序更加模塊化,
  • 有重用代碼的可能性,
  • 隱藏實現細節

對於例如一個使http調用的服務可能被看作是一個高層次的「服務」,它可以獨立地根據調用類型爲您提供所需的對象,並且可以在高層次上重用。

該服務允許自定義呼叫參數,也許避免其中一些被調用控制器指定。或者它可以做一些預處理或後處理,它可以做一些緩存等等。它的便攜式,所以你可以每次需要時調用它。

對於你最後一個問題

是否有可能對工廠內的那些承諾的工作和 返回response.data到不同的控制器?

也許這是可能的,但實施起來可能很複雜,因爲它與響應時間有關。相反,我建議你在ngResource模塊中的$ resource服務,它已經可以做你想做的事了。

見文檔:

AngularJs Tutorial on $resource

Angularjs Programming guide on $resource

相關問題