2014-02-14 20 views
0

我只是AngularJS的初學者。我正在嘗試在我的Angular數據服務上構建一個方法調用,並向其傳遞需要發佈到服務器的對象。數據服務的名稱是requestsRepository,控制器的名稱是EnterNewRequestCtrl。我的服務有一個方法「postServiceRequest」,我試圖通過我的數據對象發佈。當我把這個methon從控制器,我得到以下錯誤:類型錯誤:無法調用未定義 方法「postServiceRequest」在範圍$ scope.submitRequest(http://myhost.mydomain.com:9221/controllers/EnterNewRequestCtrl.js:9:28AngularJS:如何正確溝通ebwteen控制器和服務的方法

這裏既是服務的完整列表和控制器。

服務:

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

    var postServiceRequest = function (ServiceRequest) { 
     $http({ 
      url: 'http://localhost:8080/api/Customers', 
      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 SUCCESS"); 
     }).error(function (data, status, headers, config) { 
      //$scope.status = status; 
      console.log("postServiceRequest FAILURE: " + status); 
     }); 
    } 
}); 

而現在的控制器:

angular.module('frontEndApp').controller('EnterNewRequestCtrl',function ($scope, requestsRepository) { 
    $scope.RequestorName; 
    $scope.RequestorBusinessUnit; 
    $scope.submitRequest = function() { 
     var ServiceRequest = { 
      requestorName: $scope.RequestorName, 
      requestorBusinessUnit: $scope.RequestorBusinessUnit 
     }; 
     requestsRepository.postServiceRequest(ServiceRequest); 
    } 
    }); 

什麼是實現這個控制器的正確方法 - 服務器的方法調用?

回答

2

你需要上有一個postServiceRequest()方法返回一個對象...

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

    var postServiceRequest = function (ServiceRequest) { 
     $http({ 
      url: 'http://localhost:8080/api/Customers', 
      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 SUCCESS"); 
     }).error(function (data, status, headers, config) { 
      //$scope.status = status; 
      console.log("postServiceRequest FAILURE: " + status); 
     }); 
    }; 
    return { postServiceRequest : postServiceRequest }; 
}); 

- 編輯 -

一旦你得到的工作,你也應該改變postServiceRequest()返回從$ http()調用承諾,然後在你的控制器中使用該承諾來填充$ scope上的變量...

var frontEndApp = angular.module('frontEndApp', []); 

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

    var postServiceRequest = function (ServiceRequest) { 
     return $http({ 
      url: 'http://localhost:8080/api/Customers', 
      method: "POST", 
      data: ServiceRequest, 
      headers: { 'Content-Type': 'application/json' } 
     }); 
    }; 
    return { postServiceRequest : postServiceRequest }; 
}); 

frontEndApp.controller('EnterNewRequestCtrl',function ($scope, requestsRepository) { 
    $scope.RequestorName; 
    $scope.RequestorBusinessUnit; 
    $scope.submitRequest = function() { 
     var ServiceRequest = { 
      requestorName: $scope.RequestorName, 
      requestorBusinessUnit: $scope.RequestorBusinessUnit 
     }; 
     requestsRepository.postServiceRequest(ServiceRequest) 
      .success(function (data, status, headers, config) { 
       //$scope.persons = data; // assign $scope.persons here as promise is resolved here 
       console.log("postServiceRequest SUCCESS"); 
      }).error(function (data, status, headers, config) { 
       //$scope.status = status; 
       console.log("postServiceRequest FAILURE: " + status); 
      }); 
    }; 
}); 
+0

非常感謝Anthony! –

+0

不用擔心......代碼中可能存在一些細微的錯誤,但應該是這個想法。 –

相關問題