我正在尝试使用$ resource进行REST API交互,并使用以下代码:
内部工厂:
api.user = $resource(api.baseUrl + '/admin/login', {}, {
login: {method:'POST'}
});
Controller One:
vm.user.$login().$promise.then(function(successResult) {
console.log(successResult);
}, function(errorResult) {
console.log(errorResult);
if(errorResult.status === 404) {
}
});
我收到错误:" TypeError:无法读取属性'然后'未定义"因为$ promise未定义资源对象。
问题1:我读过多个可以使用$ promise的问题 写回调的属性。我在这做错了什么 对于用户对象上的登录方法,$ promise属性未定义。
控制器二:
vm.user.$login(function(successResult) {
console.log(successResult);
}, function(errorResult) {
console.log(errorResult);
if(errorResult.status === 404) {
}
});
这正确处理成功/错误处理,但是在successResult对象上,$ promise还有两个附加属性:undefined,$ resolved:true,而我假设successResponse应该是服务器返回的实际普通对象,但它看起来像$ resource的一个实例。
Q2:有没有办法捕获服务器返回的普通对象 使用$ resource时,没有$ resource属性?
对于解决混淆的任何帮助表示赞赏。
答案 0 :(得分:0)
您可以这样简单地调用factory
方法:vm.user.login().$promise.then(function(data) {...
您还需要使用return
,如下所示:return $resource(api.baseUrl + '/admin/login', {}, {...
我做了一个片段,检查一下:
(function() {
"use strict";
angular.module('app', ['ngResource'])
.controller('mainCtrl', function(userFactory) {
var vm = this;
vm.data = {};
vm.login = function() {
userFactory.login().$promise.then(function(data) {
vm.data = data.status;
}, function(data) {
console.log(data);
});
}
})
.factory('userFactory', function($http, $resource) {
return $resource('http://api.geonames.org/citiesJSON?', {}, {
login: {
method: 'POST'
}
});
})
})();
<!DOCTYPE html>
<html ng-app="app">
<head>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.7/angular-resource.min.js"></script>
</head>
<body ng-controller="mainCtrl as main">
Response: <pre ng-bind="main.data | json"></pre>
<hr>
<button type="button" ng-click="main.login()">Login</button>
</body>
</html>