Javascript 为什么我只需添加.success就可以执行$http函数?
我创建了一个返回$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
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);
});
}
}])