我试图用以下代码使用REST交互的$resource:
工厂内部:
api.user = $resource(api.baseUrl + '/admin/login', {}, {
login: {method:'POST'}
});
主计长一:
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属性?
任何帮助解决混乱是非常感谢的。
发布于 2016-07-07 23:55:48
您可以这样简单地调用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>
https://stackoverflow.com/questions/38251903
复制相似问题