返回undefined的角度服务不是一个函数

时间:2015-01-02 19:38:44

标签: javascript angularjs function angularjs-service angular-promise

我在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

通常这种类型的错误是自我解释的,所以要么我是一个白痴,要么就是令人困惑的事情。据我所知,这是一个功能。

1 个答案:

答案 0 :(得分:7)

您没有从字符串返回值(您从方法success返回)中获取createUser方法。你将它作为角$http的{​​{3}}的一部分。如果您实际上正在使用http进行ajax调用,请返回$http

app.service("UserList", function($http) {
  this.createUser = function(){
    return $http('...');
  }
});

successerror方法是除了$ q promise函数之外添加到httpPromise的特殊函数,它是$q promise的扩展。

如果您要返回数据,请返回$q承诺,其中then方法等同于success方法。 $ q promise没有successerror方法。

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);
});