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

Coo*_*oop 1 javascript function angularjs 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);
      });

    }

}]);
Run Code Online (Sandbox Code Playgroud)

createUserSubmit()调用该函数时,它会将另一个函数调用到createUser()服务中的函数UserList.

该服务看起来像这样:

app.service("UserList", function() {
  this.createUser = function(){
    console.log("doing it");
    return "hi";
  }
});
Run Code Online (Sandbox Code Playgroud)

现在,当这一切都运行时,我记录了"正在执行"消息,但随后我收到以下错误并且console.log(data)不记录.

TypeError: undefined is not a function
Run Code Online (Sandbox Code Playgroud)

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

PSL*_*PSL 7

您没有success从字符串返回值(您从方法返回)中获取方法createUser.你把它作为angular $httphttpPromise的一部分.如果你实际上正在使用http进行ajax调用,只需返回$http调用.

app.service("UserList", function($http) {
  this.createUser = function(){
    return $http('...');
  }
});
Run Code Online (Sandbox Code Playgroud)

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

如果你想返回数据返回一个$qpromise,它有一个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;
           });
  }
});
Run Code Online (Sandbox Code Playgroud)

UserList.createUser().then(function(data){
    console.log(data);
});
Run Code Online (Sandbox Code Playgroud)