Nice programing

부울에 대한 ng-repeat 필터

nicepro 2020. 12. 3. 19:42
반응형

부울에 대한 ng-repeat 필터


ng-repeat에서 부울 값을 필터링하려고합니다.

등록되지 않은 사용자 목록 :

    <h3>Unregistered Users</h3>
    <div ng-repeat="user in users | filter:!user.registered">
        <div class="row-fluid">
        <div class="span2">
          {{user.name}}
        </div>
      </div>
    </div>

등록 된 사용자 목록 :

    <h3>Registered Users</h3>
    <div ng-repeat="user in users | filter:user.registered">
        <div class="row-fluid">
        <div class="span2">
          {{user.name}}
        </div>
      </div>
    </div>

등록 및! 등록을 기준으로 필터링하는 좋은 방법이 있습니까?


obj 표현식으로 필터링 :

<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:{registered:false}">
    <div class="row-fluid">
    <div class="span2">
      {{user.name}}
    </div>
  </div>
</div>

JSFiddle : http://jsfiddle.net/alfrescian/9ytDN/


컨트롤러에서 필요한 논리에 따라 true 또는 false를 반환하는 메서드를 만들고 필터에서 해당 함수를 지정합니다.

이 같은:

$scope.isRegistered = function(item) {
  return item.registered;
};

<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:!isRegistered ">
    <div class="row-fluid">
    <div class="span2">
      {{user.name}}
    </div>
  </div>
</div>

항목에 부울 속성이 설정되지 않은 경우 '!'를 사용하여 속성이 true로 설정되지 않은 항목을 찾을 수 있습니다. 따옴표로. 예 필터 : {property : '!'+ true}.

예:

$scope.users = [
        {
            name : 'user1 (registered)',
            registered : true
        },
        {
            name : 'user2 (unregistered)'
        },
        {
            name : 'user3 (registered)',
            registered : true
        },
         {
            name : 'user4 (unregistered)'
        }

등록되지 않은 사용자 필터를 얻으려면 :

<h3>Unregistered Users</h3>
<div ng-repeat="user in users | filter:{registered:'!'+true}">
    <div class="row-fluid">
        <div class="span2">
          {{user.name}}
        </div>
      </div>
    </div>

같은 질문을했습니다. Alfrescian 솔루션은 Angular 1.1.5에서 나를 위해 작동하지 않았습니다.

이 바이올린을 찾았습니다 : http://jsfiddle.net/buehler/HCjrQ/

.filter('onlyBooleanValueFilter', [function(){
    return function(input, param){
        var ret = [];
        if(!angular.isDefined(param)) param = true;
        angular.forEach(input, function(v){
            // 'active' is a hard-coded field name
            if(angular.isDefined(v.active) && v.active === param){
                ret.push(v);
            }
        });
        return ret;
    };
}])

You would need to adjust the code of the filter according to your field.


Slight modification to Websirnik's answer, this allows any column name for the dataset:

.filter('onlyBooleanValueFilter', [function () {
    return function (input, column, trueOrFalse) {
        var ret = [];

        if (!angular.isDefined(trueOrFalse)) {
            trueOrFalse = false;
        }

        angular.forEach(input, function (v) {
            if (angular.isDefined(v[column]) && v[column] === trueOrFalse) {
                ret.push(v);
            }
        });

        return ret;
    };
}])

Markup:

<div repeat="row in your.dataset | onlyBooleanValueFilter: 'yourColumn' : true"> 
     ...your stuff here....
</div>

참고URL : https://stackoverflow.com/questions/17655837/ng-repeat-filter-on-boolean

반응형