首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >角$resource成功回调响应值?

角$resource成功回调响应值?
EN

Stack Overflow用户
提问于 2016-07-07 17:38:54
回答 1查看 548关注 0票数 0

我试图用以下代码使用REST交互的$resource:

工厂内部:

代码语言:javascript
运行
复制
api.user = $resource(api.baseUrl + '/admin/login', {}, {
          login: {method:'POST'}
        });

主计长一:

代码语言:javascript
运行
复制
        vm.user.$login().$promise.then(function(successResult) {
          console.log(successResult);
        }, function(errorResult) {
          console.log(errorResult);
          if(errorResult.status === 404) {
          }
        });

我得到了错误:"TypeError:无法读取属性‘那么’的未定义“,因为$promise是为资源对象未定义的。

问题1:我读到了多个问题,人们可以使用$promise属性来编写回调。对于用户对象上的登录方法,$promise属性是以未定义的方式出现的,我在这里做错了什么。

主计长二:

代码语言:javascript
运行
复制
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属性?

任何帮助解决混乱是非常感谢的。

EN

回答 1

Stack Overflow用户

发布于 2016-07-07 23:55:48

您可以这样简单地调用factory方法:vm.user.login().$promise.then(function(data) {...

您还需要使用return,如下所示:return $resource(api.baseUrl + '/admin/login', {}, {...

我做了一个片段,检查一下:

代码语言:javascript
运行
复制
(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'
      }
    });
  })
})();
代码语言:javascript
运行
复制
<!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>

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38251903

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档