Angular $资源何时使用回调函数以及如何获取对象" clean"

时间:2015-04-23 09:40:36

标签: javascript angularjs angularjs-resource angularjs-http

$resources我遇到了问题,当我可以简单地将变量分配给$resource回复var user = Users.getCurrent()或我{&#39}时,我并没有真正明白这一点。我要使用callBack。

我创建了service,并将其绑定到resource

  .factory('Users', function ($resource, gcAPICOACH) {
    return  $resource(gcAPICOACH + 'users/current',{},
      {
        'getCurrent': {method: 'GET' },
        'save': {method: 'PUT'}

      });
  });

我用于授权的服务

.factory('gcAuth', function ($rootScope, $log) {
    var currentUser;

    return {
      login: function (user) {
        currentUser = user;
        $rootScope.$emit('notify', {type: 'info', title: gettext('Welcome'), text: user.name});
        $rootScope.$broadcast('user.logged', user,  $rootScope.next);

      },
      isLoggedIn: function () {
        return !angular.isUndefined(currentUser);
      },
      currentUser: function () {
        return currentUser;
      }
    };
  });

现在我用登录功能创建了一个简单的登录控制器。 这是问题,我应该使用哪一个?

    $scope.login = function () {
//option 1
      Users.getCurrent(function (user) {
        $log.debug("inside");
        gcAuth.login(user);
      });
//option 2
      gcAuth.login(Users.getCurrent());
    };

和调用函数的html:

 <p><a class="btn btn-lg btn-success" ng-hide="user" ng-click="login()">Login!<span class="glyphicon glyphicon-ok"></span></a></p>

注意:我设置了用户令牌的拦截器,所以当我调用currentUser时,它实际上会返回正确的对象

文件说明:

  

重要的是要意识到调用$ resource对象方法会立即返回一个空引用(对象或数组,具体取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。

很明显,为了渲染没有问题,但在这种情况下,&#34;魔法&#34;角度没有影响。我是对的吗?

PS:另一个问题是Users.getCurrent()返回的对象还有角色函数,如$promise和co。我怎样才能找回 clean 对象?

1 个答案:

答案 0 :(得分:0)

你应该使用选项1. $resource方法总是异步的,所以它不会立即返回一个对象,只有一个包含空占位符的引用,它会在ajax之后填充电话已加载。

您可以使用angular.fromJson(angular.toJson(user))获取干净的对象。相关回答问题:Strip or overwrite an AngularJS $resource