繁体   English   中英

控制器中的Angularjs过滤器。 如何过滤不为null,undefined和false的值?

[英]Angularjs filter in controller. How to filter not null, undefined and false values?

我有一个数组:

        var array = [
            {"name": "name1", "value": null},
            {"name": "name2", "value": 3},
            {"name": "name3", "value": false},
            {"name": "name4", "value": undefined},
            {"name": "name5", "value": "some text"}
        ];

现在,我想在我的角度控制器中过滤此数组以获取具有值的项目-

{"name": "name2", "value": 3}

{"name": "name5", "value": "some text"}

因此,我尝试了这种方式(它不起作用):

data = $filter('filter')(data, { value: emptyOrNull(value) });
function emptyOrNull(value) {
    return !(value === null || value === undefined || value === false);
}

我究竟做错了什么?

一种简单有效的方法,它可以解决棘手的问题,但可以帮助您。 它将处理所有null, undefined, ('') ,false`

只是这样做

<span ng-repeat="entry in ctrl.array | filter:!!entry.value ">{{entry.name}} </span>

工作朋克

script.js

(function(angular) {
  'use strict';
angular.module('FilterInControllerModule', []).
  controller('FilterController', ['filterFilter', function(filterFilter)  {

    this.array = [{
    "name": "name1",
    "value": null
}, {
    "name": "name2",
    "value": 3
}, {
    "name": "name3",
    "value": false
}, {
    "name": "name4",
    "value": undefined
}, {
    "name": "name5",
    "value": "some text"
}];

  }]);
})(window.angular);

也可以使用自定义过滤器..

.filter('customFilter',function(){
    return function(val,input){
      var result =[];
      angular.forEach(val,function(res){
        if(res.value && res.value.length || res.value){
           result.push(res);
        }

      });
      return result;

    }

  })

index.html

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Example - example-example29-production</title>


  <script src="//ajax.googleapis.com/ajax/libs/angularjs/1.4.3/angular.min.js"></script>
  <script src="script.js"></script>



</head>
<body ng-app="FilterInControllerModule">
  <div ng-controller="FilterController as ctrl">
  <div>
    All entries:
    <span ng-repeat="entry in ctrl.array | filter:!!entry.value ">{{entry.name}} </span>
  </div>
  <div>

  </div>
</div>
</body>
</html>

如果您想保持代码的风格,只需执行此操作即可。

data = $filter('filter')(data, {
    value: !!value
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM