Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/413.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么我只需添加.success就可以执行$http函数?_Javascript_Angularjs_Angular Promise_Angular Http - Fatal编程技术网

Javascript 为什么我只需添加.success就可以执行$http函数?

Javascript 为什么我只需添加.success就可以执行$http函数?,javascript,angularjs,angular-promise,angular-http,Javascript,Angularjs,Angular Promise,Angular Http,我创建了一个返回$http承诺的工厂 我在控制器中使用这个工厂。但我的行为越来越滑稽 当我说 loginSrvc() .success(function(res){ console.log("res:"); console.log(res); }) .error(function(res){ console.log("res"); console.log

我创建了一个返回$http承诺的工厂

我在控制器中使用这个工厂。但我的行为越来越滑稽

当我说

loginSrvc()
        .success(function(res){
            console.log("res:");
            console.log(res);
        })
        .error(function(res){
            console.log("res");
            console.log(res);
        });
我得到一个错误,TypeError:object不是函数

但当我说省略括号时

loginSrvc
        .success(function(res){
            console.log("res:");
            console.log(res);
        })
        .error(function(res){
            console.log("res");
            console.log(res);
        });
它工作得很好!成功打印到控制台

我无法理解这种奇怪的行为。只是添加一个success函数调用$http活动

这是我的完整控制器:

loginApp.controller('loginCtrl', ['$scope', '$state', 'loginSrvc', function($scope, $state, loginSrvc){

    $scope.loginForm = {};
    $scope.loginForm.email = "";
    $scope.loginForm.password = "";

    $scope.submit = function(){

        loginSrvc
        .success(function(res){
            console.log("res:");
            console.log(res);
        })
        .error(function(res){
            console.log("res");
            console.log(res);
        }); 
    }
}])

因为您的服务已经返回调用的$http服务,所以无需从控制器再次调用它。承诺已经兑现


更好的模式是使用ngResource,这样您就可以为每个API端点抽象处理程序,并提供各自的承诺。

之所以不带括号传递,是因为loginSrvc是一个对象,而不是一个函数

工厂API实例化一个对象

由于您试图将对象作为函数调用,因此出现错误:

TypeError:object不是函数

我本应该使用$resource,但使用transformRequest方法时遇到了此问题。
loginApp.controller('loginCtrl', ['$scope', '$state', 'loginSrvc', function($scope, $state, loginSrvc){

    $scope.loginForm = {};
    $scope.loginForm.email = "";
    $scope.loginForm.password = "";

    $scope.submit = function(){

        loginSrvc
        .success(function(res){
            console.log("res:");
            console.log(res);
        })
        .error(function(res){
            console.log("res");
            console.log(res);
        }); 
    }
}])