2016-07-18 5 views
0

ich ng-repeat für Artikel Anmerkungen haben, sieht das wie folgt aus:Angular ng-Show, wenn in Array

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

Ich versuche, diesen Teil zu zeigen, nur, wenn der Benutzer ein Admin ist:

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

Ich habe versucht, das nach den Antworten here einrichten.

Also habe ich eine Funktion in meinem Controller:

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

Aber es gibt -1 jedes Mal, auch wenn der Benutzer ein Admin ist. Meine Daten sehen so aus:

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" 

Antwort

1

Verwendung dieses in Ihrem HTML

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

Dies ist die Methode, um festzustellen, dass der Benutzer auf die Admin-Rolle gehört oder nicht.

$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

Vielleicht haben Sie einen Fehler in dieser Zeile?

Sie suchen hier, um zu sehen, ob die Liste der Rollen für diese Benutzer in dem Array von Kommentaren vorhanden ist.

Vielleicht müssen Sie nur die tatsächliche user.roles-Array einchecken und sehen, ob dort eine Admin-Rolle ist? Etwas wie:

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

Das ist, weil es ein Objekt ist, können Sie den Index von nur Array abrufen. In dem von Ihnen angegebenen Link befindet sich ein Array.