source

AngularJS - ng-repeat으로 커스텀필터를 구조화하여 아이템을 조건부로 반환하는 방법

ittop 2023. 4. 2. 11:54
반응형

AngularJS - ng-repeat으로 커스텀필터를 구조화하여 아이템을 조건부로 반환하는 방법

목록 항목을 출력하는 ng-repeat이 있습니다.조건이 참일 경우에만 목록 항목이 인쇄되도록 사용자 지정 필터를 작성하려고 합니다.

필터에 변수가 전달되지 않는 것 같아서 구조가 잘못된 것 같습니다.

index.displaces를 표시합니다.

<div ng-show="userDetails.username" class="nav">
    <p>Menu</p>
    <li ng-repeat="menuItem in menu | matchAccessLevel:$rootScope.userDetails.accessLevel:menuItem.minAccess | orderBy:'position' ">
        <a ng-href="/angular-app/app/{{menuItem.id}}">{{menuItem.name}}</a>
    </li>
</div>

app.module

userApp.filter('matchAccessLevel', function() {
    return function( item, userAccessLevel, minAccessLevel ) {
        if( userAccessLevel >= minAccessLevel ) {
            return item;
        }
    }
});

필터는 어레이 내의 개별 항목에서는 작동하지 않습니다.전체 어레이를 다른 어레이로 변환합니다.

userApp.filter('matchAccessLevel', function() {
  return function( items, userAccessLevel) {
    var filtered = [];
    angular.forEach(items, function(item) {
      if(userAccessLevel >= item.minAccess) {
        filtered.push(item);
      }
    });
    return filtered;
  };
});

plnkr 참조

**항상 함수에 대한 인수를 검사합니다.그 가치가 항상 명확하지는 않다.*

필터 가이드 참조

Array.filter를 사용하면 보다 간결한 솔루션을 얻을 수 있습니다.

app.filter('matchAccessLevel', function() {
    return function( items, userAccessLevel ) {
      return items.filter(function(element){
        return userAccessLevel >= element.minAccess;
      });
    }
});

플런커 확인

CoffeeScript 애호가용:

userApp.filter 'matchAccessLevel', ->
  (items, userAccessLevel) ->
    item for item in items when userAccessLevel >= item.minAccess

언급URL : https://stackoverflow.com/questions/15196161/angularjs-how-to-structure-a-custom-filter-with-ng-repeat-to-return-items-cond

반응형