我在Angular控制器中有一个函数,如下所示:
app.controller("UsersController", ["$scope", "UserList", function($scope, UserList) {
$scope.createUserSubmit = function(newUser) {
UserList.createUser().success(function(data){
console.log(data);
});
}
}]);
当调用createUserSubmit()
函数时,它会调用服务createUser()
中函数UserList
的另一个函数。
服务如下:
app.service("UserList", function() {
this.createUser = function(){
console.log("doing it");
return "hi";
}
});
现在,当这一切都运行时,我会记录“正在执行”消息,但后来我收到以下错误,而console.log(data)
没有记录。
TypeError: undefined is not a function
通常这种类型的错误是自我解释的,所以要么我是一个白痴,要么就是令人困惑的事情。据我所知,这是一个功能。
答案 0 :(得分:7)
您没有从字符串返回值(您从方法success
返回)中获取createUser
方法。你将它作为角$http
的{{3}}的一部分。如果您实际上正在使用http进行ajax调用,请返回$http
。
app.service("UserList", function($http) {
this.createUser = function(){
return $http('...');
}
});
success
和error
方法是除了$ q promise函数之外添加到httpPromise的特殊函数,它是$q
promise的扩展。
如果您要返回数据,请返回$q
承诺,其中then
方法等同于success
方法。 $ q promise没有success
和error
方法。
app.service("UserList", function($http) {
this.createUser = function(){
return $http('...').then(function(response){
//Do your transformation and return the data
return response.data;
});
}
});
和
UserList.createUser().then(function(data){
console.log(data);
});