Javascript 使用AngularJS,我如何利用ng show来查找数组中的某些值?

Javascript 使用AngularJS,我如何利用ng show来查找数组中的某些值?,javascript,json,angularjs,angularjs-directive,meanjs,Javascript,Json,Angularjs,Angularjs Directive,Meanjs,我有一个模型,程序,看起来像这样 var ProgramSchema = new Schema({ permissions: [{ user: { type: Schema.ObjectId, ref: 'User' }, roles: { type: [{ type: String, enum: ['reader', 'editor', 'admin', 'r

我有一个模型,
程序
,看起来像这样

var ProgramSchema = new Schema({
  permissions: [{
      user: {
        type: Schema.ObjectId,
        ref: 'User'
      },
      roles: {
        type: [{
            type: String,
            enum: ['reader', 'editor', 'admin', 'requested']
          }]
      }
    }],
  type: {
    type: String,
    enum: ['public', 'private'],
    default: 'public',
    required: 'Type cannot be blank'
  }
});
在页面上显示
程序列表时,如果当前经过身份验证的用户
$scope.authentication.user
位于
程序.permissions.user
中,并且具有reader、editor或admin角色,我希望显示一个图标。 我在考虑一个
ng show
,但是由于
programs.permissions
是一个数组,我无法让它工作。 任何帮助都会很好!谢谢

样本
程序
数据

{
    "_id" : ObjectId("55ab4acd24640cd55097c356"),
    "permissions" : [ 
        {
            "user" : ObjectId("55a897dfad783baa677e1326"),
            "roles" : [ 
                "reader"
            ]
        }, 
        {
            "user" : ObjectId("5563f65a84426d913ae8334e"),
            "roles" : [ 
                "editor"
            ]
        }
    ]
}

通过一些帮助,我终于做到了

我在ng show中调用了一个函数

ng-show="userFollowedProgram(program)"
ng-show="userFollowedProgram(program)"
在我的控制器中

$scope.userFollowedProgram = function(program) {
  //loop thru permissions and see if user is in there.
  for (var i = 0; i < program.permissions.length; i++) {
    if (program.permissions[i].user === $scope.authentication.user._id) {
      //loop thru roles and see if user is following.
      if (program.permissions[i].roles.indexOf('admin') > -1 ||
          program.permissions[i].roles.indexOf('editor') > -1 ||
          program.permissions[i].roles.indexOf('reader') > -1) {
          return true
        }
    }
  }
  return false;

};
$scope.userFollowedProgram = function(program) {
  for (var i = 0; i < program.permissions.length; i++) {
    if (program.permissions[i].user === $scope.authentication.user._id) {
      return true;
    }
  }
  return false;

};
$scope.userfollowdprogram=函数(程序){
//循环访问权限并查看用户是否在其中。
for(var i=0;i-1||
program.permissions[i].roles.indexOf('editor')>-1||
program.permissions[i].roles.indexOf('reader')>-1){
返回真值
}
}
}
返回false;
};

虽然不是最漂亮的,但可以使用
ng show
上的
|
逻辑运算符显式检查值。我模拟了一个简单的例子,使用
作为“图标”-但您当然可以从这里将想法转化为您的工作副本。注意以下几点

<li ng-repeat="user in users">
    <span>{{ user.name }}</span>
    <span class="ico" 
          ng-show="user.roles.indexOf('reader') > -1 || user.roles.indexOf('editor') > -1 || user.roles.indexOf('admin') >-1">icon
    </span>
</li>
-简单演示


您可以完成的另一个有趣的方法包括通过regex测试他们的角色并返回真实值。可能会比它的价值更高的开销,但如果您愿意,请查看它

<span class="ico" ng-show="isInRole(user)" >icon</span>

-regex演示版

我能够理解它

我在我的
ng show中调用了一个函数

在我的控制器中

$scope.userFollowedProgram = function(program) {
  //loop thru permissions and see if user is in there.
  for (var i = 0; i < program.permissions.length; i++) {
    if (program.permissions[i].user === $scope.authentication.user._id) {
      //loop thru roles and see if user is following.
      if (program.permissions[i].roles.indexOf('admin') > -1 ||
          program.permissions[i].roles.indexOf('editor') > -1 ||
          program.permissions[i].roles.indexOf('reader') > -1) {
          return true
        }
    }
  }
  return false;

};
$scope.userFollowedProgram = function(program) {
  for (var i = 0; i < program.permissions.length; i++) {
    if (program.permissions[i].user === $scope.authentication.user._id) {
      return true;
    }
  }
  return false;

};
$scope.userfollowdprogram=函数(程序){
for(var i=0;i
谢谢@scniro。不幸的是,它有点复杂,除非我完全没有抓住要点。在
程序
文档中,它包含一个权限数组,其中包括对
用户
的引用和它拥有的
角色数组。我已经更新了问题,以显示示例数据。@scniro您认为这个实现怎么样。我完成了工作,但感觉有点暴力。再次感谢你的帮助!我在这里看不到任何角色。难道我的例子不能让你走上正确的方向吗?当然,这是一个简化的演示-但我认为围绕您的语法工作是非常简单的