AngularJS - 比较资源和对象

时间:2014-07-16 19:26:52

标签: javascript angularjs

在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返回资源列表?有什么比我能做的更简单而不是等待在这里解决的承诺吗?

1 个答案:

答案 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;});
    });
  });
});