programing

부울 속성에 의한 "track by"를 사용한 각도 1.2ng 반복 필터링

newsource 2023. 3. 31. 22:26

부울 속성에 의한 "track by"를 사용한 각도 1.2ng 반복 필터링

부울 속성 값을 기준으로 일부 목록 항목을 필터링하려고 하는데, 어떤 작업을 수행해도 전체 목록이 항상 표시됩니다.내가 시도했던 것 중 몇 가지는 너무 망가져서 아무것도 표시되지 않지만, 그것은 여기도 저기도 아니다.필터링이 원하는 대로 작동하지 않습니다.

$scope.attendees = [
     {"firstname":"Steve",    "lastname":"Jobs",  "arrived":true,  "id":1}
    ,{"firstname":"Michelle", "lastname":"Jobs",  "arrived":false, "id":2}
    ,{"firstname":"Adam",     "lastname":"Smith", "arrived":true,  "id":3}
    ,{"firstname":"Megan",    "lastname":"Smith", "arrived":false, "id":4}
    ,{"firstname":"Dylan",    "lastname":"Smith", "arrived":false, "id":5}
    ,{"firstname":"Ethan",    "lastname":"Smith", "arrived":false, "id":6}
];

다음 ng-repeat 필터링을 사용합니다.

<ul>
    <li ng-repeat="person in attendees track by person.id | filter:arrived:'false'">
            {{person.lastname}}, {{person.firstname}}
    </li>
</ul>

참조할 수 있는 모든 치환을 시도해 본 것 같습니다.대부분은 다양한 StackOverflow 검색 결과입니다.

  • filter:'arrived'
  • filter:arrived
  • filter:'person.arrived'
  • filter:person.arrived
  • filter:{arrived:true}
  • filter:{arrived:'true'}
  • filter:{person.arrived:true}
  • filter:{person.arrived:'true'}

커스텀 필터 기능도 만들어 보았습니다.

$scope.isArrived = function(item) {
    return item.arrived;
};

이렇게 적용하면 다음과 같습니다.

  • filter:isArrived
  • filter:'isArrived'
  • filter:{isArrived(person)}
  • filter:isArrived(person)
  • filter:'isArrived(person)'

이 중 어느 것도 효과가 없는 것 같습니다.제가 무엇을 빠뜨리고 있나요?

여기 문제를 증명하는 PLNKR이 있다.

트랙 by는 식 끝에 있어야 합니다.

<li ng-repeat="person in attendees | filter: {arrived: false } track by person.id">

@그루프은 맞지만, 공식 소식통으로부터 답변을 드리겠습니다.

Angular 문서에서:

참고: 항상 마지막 식이어야 합니다.

<div ng-repeat="model in collection | orderBy: 'id' as filtered_result track by model.id">
  {{model.name}}
</div>

문서의 "Arguments" 부분에도 표시됩니다.

트래킹 표현은 필터 뒤에 와야 하며 에일리어스 표현 뒤에 와야 합니다.

언급URL : https://stackoverflow.com/questions/21416198/filtering-an-angular-1-2-ng-repeat-with-track-by-by-a-boolean-property