我有一个页面,用于在我们的restful Web服务中创建新资源。该页面的控制器如下:
appController.controller('AddCtrl', ['$scope', 'Person',
function($scope, $location, Person) {
$scope.person = new Person();
$scope.emailList = [];
$scope.add = function() {
$scope.emailList.push({email: $scope.email});
$scope.person.emailList = $scope.emailList;
$scope.person.$save();
};
}]);
我的服务人员,看起来像这样:
appService.factory('Person', ['$resource',
function($resource, uuid){
return $resource(baseUrl + 'candidate/:uuid', {}, {
query: {method:'GET', isArray:true},
get: {method:'GET', params:{uuid: uuid}},
save: {method: 'POST'},
remove: {method: 'DELETE', params:{uuid: uuid}}
});
}
]);
但是,当我查看该页面时,我注意到该行的错误:
$scope.person = new Person();
Person is not a function at new <anonymous> ...
我不确定为什么这是一个问题。之前工作正常。我还尝试在服务中添加一个create方法:
appService.factory('Person', ['$resource',
function($resource, uuid){
var r = $resource(baseUrl + 'candidate/:uuid', {}, {
...
});
r.create = function() {
return $resource(baseUrl + 'candidate', {});
}
return r;
}
]);
但是,我在控制器中收到以下错误:
$scope.person = Person.create();
TypeError: Cannot read property 'create' of undefined at new <anonymous>
答案 0 :(得分:2)
原因是,经常发生,而不是你在寻找它。问题出在这里:
appController.controller('AddCtrl', ['$scope', 'Person',
function($scope, $location, Person) {
您已为控制器指定了两个依赖项,但您的函数需要3个参数 - 最后一个将为空,您的Person服务被指定为$location
。它应该是:
appController.controller('AddCtrl', ['$scope', '$location', 'Person',
function($scope, $location, Person) {
假设您正在使用$ location。
您的资源中会出现相同的问题 - uuid始终为null。