Angular ng-show如果在数组中

时间:2016-07-18 09:16:17

标签: javascript angularjs

我有文章评论的ng-repeat,看起来像这样:

<div ng-repeat="comment in comments">
          <li class="item" ng-class-even="'even'">
            <div class="row">
              <div class="col">
                <i class="icon ion-person"></i> {{ comment.user.first_name }} {{ comment.user.last_name }}
                <i class="icon ion-record"></i> {{ comment.created_at }}
              </div>
              <!-- TODO: this needs to be an ng-if admin -->
              <div ng-show="hasRole(comment.user)" class="col right">
                <i class="icon ion-record admin"></i> Admin
              </div>
            </div>
            <div class="row">
              <div class="col">
                <p>{{ comment.text }}</p>
              </div>
            </div>
          </li>
        </div>

我只是在用户是管理员时才会显示此部分:

<div ng-show="hasRole(comment.user)" class="col right">
                <i class="icon ion-record admin"></i> Admin
              </div>

我尝试按照here的答案进行设置。

所以我在我的控制器中创建了一个函数:

 $scope.hasRole = function(roleName) {
    return $scope.comments.user.roles.indexOf(roleName) >= 0;
  }

但每次返回-1,即使用户是管理员也是如此。我的数据如下:

1:Object
    $$hashKey: "object:28"
    article_id:"2"
    created_at:"2016-05-12 12:19:05"
    id:6
    text:"someCommentText"
    updated_at:null
    user:Object
        active:"1"
        created_at:null
        first_name:"admin"
        id:1
        last_name:"admin"
        roles:Array[1]
            0:Object
            created_at:null
            id:1
            name:"Admin"
            parent_id:null
            pivot:Object
            slug:"admin"

3 个答案:

答案 0 :(得分:2)

在HTML

中使用此功能
General

这是确定用户是否属于管理员角色的方法。

<div ng-show="hasAdminRole(comment.user.roles)" class="col right">
    <i class="icon ion-record admin"></i> Admin
</div>

答案 1 :(得分:0)

也许你在这一行上有错误?

var indexOfRole = $scope.comments.indexOf(user.roles);

您正在此处查看此用户的角色列表是否存在于评论数组中。

也许你只需要检查实际的user.roles数组,看看那里是否有Admin角色?类似的东西:

$scope.hasRole = function(user) {
  for (var i = 0; i < user.roles.length; i++) {
    if (user.roles[i].slug === 'admin') { return true; }
  }
  return false
}

答案 2 :(得分:0)

那是因为它是一个对象,你可以获取只有数组的索引。在您提供的链接中是一个数组。