$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
时,它实际上会返回正确的对象
文件说明:
很明显,为了渲染没有问题,但在这种情况下,&#34;魔法&#34;角度没有影响。我是对的吗?重要的是要意识到调用$ resource对象方法会立即返回一个空引用(对象或数组,具体取决于isArray)。从服务器返回数据后,将使用实际数据填充现有引用。这是一个有用的技巧,因为通常将资源分配给模型,然后由视图呈现。
PS:另一个问题是Users.getCurrent()
返回的对象还有角色函数,如$promise
和co。我怎样才能找回 clean 对象?
答案 0 :(得分:0)
你应该使用选项1. $resource
方法总是异步的,所以它不会立即返回一个对象,只有一个包含空占位符的引用,它会在ajax之后填充电话已加载。
您可以使用angular.fromJson(angular.toJson(user))
获取干净的对象。相关回答问题:Strip or overwrite an AngularJS $resource