在Angular中,某些方法调用返回对象,有些方法返回资源,这使得它们难以比较。我有一个用户模型和一个权限模型。用户模型定义为:
myApp.service('User', function($resource) {
var User = $resource('users/:userId.json');
return User;
});
定义了权限模型:
myApp.service('Permission', function($resource) {
var Permission = $resource('permissions');
return Permission;
});
当我检索用户时,返回的json具有用户的权限:
{"id":1,"username":"Admin","group_id":"1","permissions":[{"id":1,"name":"Create Users"},"id":2,"name":"Delete Users"}]}
这意味着当我检索用户时,我可以使用.permissions访问他/她的权限。例如
User.get({userId: 1}).permissions
我想将此与所有权限列表进行比较,并获取用户尚未拥有的权限列表:
$scope.user = User.get({userId: 1});
Permission.query().$promise.then(function(all){
$scope.user.$promise.then(function(u){
$scope.unselected_permissions = _.difference(all, u.permissions);
});
});
问题是,all
是资源的数组,而u.permissions
是对象的数组。是否有一种简单的方法可以让u.permissions
返回资源列表?有什么比我能做的更简单而不是等待在这里解决的承诺吗?
答案 0 :(得分:0)
我能够通过创建我自己的差异方法来解决这个问题,该方法比较了id:
Permission.query().$promise.then(function(all){
$scope.user.$promise.then(function(u){
$scope.unselected_permissions = all.filter(function(p){
return !u.permissions.some(function(q){return p.id == q.id;});
});
});
});