2014-09-05 37 views
0

我有一個控制器和者地位(我將發佈所有控制器和服務代碼,因爲我不知道什麼可能是錯誤的):Angular.js服務功能未定義

控制器:

'use strict'; 
app.controller('membersController', ['$scope', 'membersService', function($scope, membersService) { 
    $scope.members = []; 
    $scope.updatedMembers = []; 
    membersService.getMembers().then(function (results) 
    { 
     $scope.members =results.data; 
    }, 
    function(error) { 
     alert(error.data.message); 
    }); 
    $scope.update = function() { 
     membersService.updateMembers($scope.updatedMembers).then(function(results) { 
      alert(results); 
     }, 
     function(results) { 
      alert(results); 
     }); 
    }; 
    $scope.updateActive = function(member) { 
     if (!isInArray($scope.updatedMembers,member)) 
     { 
      $scope.updatedMembers.push(member); 
     } 
    }; 
    var isInArray = function(array, item) { 
     var found = false; 
     for (var i = 0; i < array.length; i++) { 
      if (array[i].id == item.id) { 
       found = true; 
       break; 
      } 
     } 
     return found; 
    }; 
}]); 

服務:

'use strict'; 
app.factory('membersService', ['$http', 'ngAuthSettings', function ($http, ngAuthSettings) { 
    var serviceBase = ngAuthSettings.apiServiceBaseUri; 
    var membersServiceFactory = {}; 
    var _getMembers = function() { 
     return $http.get(serviceBase + 'api/members').then(function (results) { 
      return results; 
     }); 
    }; 
var _updateMembers = function(updatedMembers) { 
     $http.post(serviceBase + 'api/Members/UpdateMembers', updatedMembers, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } }).then(
      function (results) { 
       return results; 
      }, 
      function(results) { 
       return results; 
      }); 
    }; 
    membersServiceFactory.getMembers = _getMembers; 
    membersServiceFactory.updateMembers = _updateMembers; 
    return membersServiceFactory; 
}]); 

這是我得到的螢火錯誤:

Error: 
membersService.updateMembers(...) is undefined 
[email protected]://localhost:37272/Controllers/membersController.js:16:13 
$a.prototype.functionCall/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:172:370 
fc[c]</<.compile/</</<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:189:395 
Yd/this.$get</[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:108:471 
Yd/this.$get</[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:109:230 
fc[c]</<.compile/</<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:189:370 
ne/c/<@http://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:31:30 
[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:7:363 
ne/[email protected]://ajax.googleapis.com/ajax/libs/angularjs/1.2.16/angular.min.js:31:14 

任何人都可以至少指向正確的方向,因爲我是angular.js中的新手。此外,我想發現請求傳遞到.NET的WebAPI即使有這樣的錯誤

+3

這就是說'updateMemebers'的返回值是未定義的,因爲你沒有從你的方法返回任何東西。 '返回$ http.post(...' – 2014-09-05 14:37:52

回答

4

如果控制器要使用它像一個承諾對象,我的意思是:

$scope.update = function() { 
     membersService.updateMembers($scope.updatedMembers).then(function(results) { 
      alert(results); 
     }, 
     function(results) { 
      alert(results); 
     }); 
    }; 

,那麼你應該返回承諾對象,$http get方法本身就是回諾。

'use strict'; 
app.factory('membersService', ['$http', 'ngAuthSettings', function ($http, ngAuthSettings) { 
    var serviceBase = ngAuthSettings.apiServiceBaseUri; 
    var membersServiceFactory = {}; 
    var _getMembers = function() { 
     return $http.get(serviceBase + 'api/members'); 
    }; 
var _updateMembers = function(updatedMembers) { 
     $http.post(serviceBase + 'api/Members/UpdateMembers', updatedMembers, { headers: { 'Content-Type': 'application/x-www-form-urlencoded' } });; 
    }; 
    membersServiceFactory.getMembers = _getMembers; 
    membersServiceFactory.updateMembers = _updateMembers; 
    return membersServiceFactory; 
}]); 
+0

謝謝,它的工作。 – 2014-09-06 16:15:38