2016-07-18 4 views
0

У меня есть нг-повтор для статьи комментариев, который выглядит следующим образом:Угловых нг-шоу, если в массиве

<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" 

ответ

1

использовать это в вашем HTML

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

это метод, чтобы определить, что пользователь принадлежит к роли администратора или нет.

$scope.hasAdminRole = function(roles) { 
    var isAdmin = false; 
    for(var i = 0; i < roles.length; i++) { 
     if (roles[i].name == 'Admin') { 
      isAdmin = true; 
      break; 
     } 
    } 

    return isAdmin; 
} 
0

Возможно, у вас есть ошибка в этой строке?

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

Вы смотрите здесь, чтобы узнать, существует ли список ролей для этих пользователей в массиве комментариев.

Возможно, вам нужно просто зарегистрировать фактический массив user.roles и посмотреть, есть ли там роль администратора? Что-то вроде:

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

Это потому, что это объект, вы можете получить индекс только массива. В ссылке, которую вы предоставили, является массив.

Смежные вопросы