2014-02-15 56 views
1

對於AngularJS來說,這是非常新穎的事情,我發現自己需要能夠在同一服務中託管所有常見的CRUD操作 - 在我的情況中, 「requestsRepository」:AngularJS:如何在同一服務中正確託管所有CRUD操作

frontEndApp.factory('requestsRepository', function ($http) { 

    var postServiceRequest = function (ServiceRequest) { 
     $http({ 
      url: 'http://localhost:8080/api/ServiceRequests', 
      method: "POST", 
      data: ServiceRequest, 
      headers: { 'Content-Type': 'application/json' } 
     }).success(function (data, status, headers, config) { 
      //$scope.persons = data; // assign $scope.persons here as promise is resolved here 
      console.log("postServiceRequest Status: " + status); 
     }).error(function (data, status, headers, config) { 
      //$scope.status = status; 
      console.log("postServiceRequest FAILURE: " + status + " ServiceRequest: " + ServiceRequest); 
     }); 
    }; 

    var getServiceRequests = function() { 
     $http({ 
      url: 'http://localhost:8080/api/ServiceRequests', 
      method: "GET" 
     }).success(function (data, status, headers, config) { 
      $scope.requests = data; 
      console.log("getServiceRequests Status: " + status); 
     }).error(function (data, status, headers, config) { 
      //$scope.status = status; 
      console.log("getServiceRequests FAILURE: " + status + " ServiceRequest: " + ServiceRequest); 
     }); 
    }; 

    return { postServiceRequest: postServiceRequest, getServiceRequests: getServiceRequests }; 
}); 

到目前爲止,我很難一起託管postServiceRequest和getServiceRequests。

這裏是我的控制器,這使得以requestsRepository.getServiceRequests呼叫:

angular.module('frontEndApp').controller('ViewExistingRequestsCtrl', ['$scope', 
    function ($scope, requestsRepository) { 
     $scope.requests = requestsRepository.getServiceRequests; 
    }]); 

當這個調用時,我得到:在新的(http://myhost.mydomain.com:9221/controllers/ViewExistingRequestsCtrl.js:3:43

無法讀取的不確定 財產「getServiceRequests」

我的猜測是,我沒有在我的服務中正確公開我的兩個函數 - 我只是不知道如何正確執行,因此同一服務中的每個函數都可以從同一應用程序中的任何控制器訪問。

+0

FYI:關於你的第二個代碼塊的第3行,它不是getServiceRequests,它只是複製參考該函數的調用。 '()'丟失。 – Sylvain

回答

1

它看起來像requestsRepository是未定義的。

嘗試修改你的控制器定義是這樣的:

angular.module('frontEndApp').controller('ViewExistingRequestsCtrl', ['$scope', 'requestsRepository', 
    function ($scope, requestsRepository) { 
     $scope.requests = requestsRepository.getServiceRequests; 
    }]); 

注意數組中除了「requestsRespository」的。

通過在其中創建一個'$ scope'數組來創建控制器時,您已經明確指定了您想要解析的依賴關係的名稱。該數組不包含應該爲requestsRespository變量注入的服務的名稱。通過向數組添加'requestsRepository',angularjs將知道注入哪個服務。

您不必在數組中提供'$ scope'和'requestsRespository'。 Angularjs應該能夠計算出依賴關係的名稱來自動解析,因爲控制器函數定義中的參數名稱與正在注入的服務的名稱相匹配。考慮到這一點,下面的片段也應努力:

angular.module('frontEndApp').controller('ViewExistingRequestsCtrl', 
    function ($scope, requestsRepository) { 
     $scope.requests = requestsRepository.getServiceRequests; 
    }); 
相關問題