为什么我可以通过添加 .success 来执行 $http 函数
Why am I able to execute an $http function just by adding .success to it?
我创建了一个返回$http
承诺的工厂。
loginRsrc.factory('loginSrvc', ['$http', function($http){
var http = $http({
method: 'POST',
url: "http://myproj.herokuapp.com/api/signIn",
data: $.param({email: "joe@gmail.com", password: "1234567"}),
headers: {'Content-Type': 'application/x-www-form-urlencoded'}
});
return http;
我在控制器中使用此工厂。但我的行为很有趣。
当我说
loginSrvc()
.success(function(res){
console.log("res:");
console.log(res);
})
.error(function(res){
console.log("res");
console.log(res);
});
我收到一个错误,TypeError: object is not a function
.
但是当我说(省略括号)时
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 实例化Object
由于您尝试将 Object 作为函数调用,这就是您出现错误的原因:
TypeError: object is not a function
相关文章:
- 通过HTTP头限制Javascript的执行
- 在Selenium IDE中执行HTTP POST
- 角度 2:使用一个 http 调用的结果来执行另一个调用
- $http.post() angularjs 响应函数未按正确的顺序执行
- 在不执行ajax请求的情况下,使用jQuery读取HTTP标头以检查404
- 修复在执行http获取请求angularJS时的竞争条件
- 如何将 $http.put 封装到一个函数中,该函数执行某些操作,然后返回通过或失败的承诺
- 如何限制在 http-on-modify-request 之后触发的 JavaScript 函数的执行每分钟一定次数
- 使用 $watch 在属性更改时执行$http调用的角度服务
- $http angularjs 调用不是从带有 Worklight 的移动设备执行的
- AngularJS对跨源资源执行OPTIONS HTTP请求=>错误401
- http.get 请求未执行
- 为什么我可以通过添加 .success 来执行 $http 函数
- 在我的Node服务器上收到http发布请求时执行脚本
- 如何避免在使用Angularjs执行$http GET时在URL中显示参数
- 在通过angular $resource成功执行HTTP DELETE操作后,避免使用HTTP GET
- 在对另一个组件执行http请求时保持响应性
- AngularJS:在自定义服务中执行$http请求并返回数据
- 如何在没有脚本标记但在js文件中的javascript中执行http回调请求
- 从Angular拦截器中执行$http请求