UI-Grid Single Filter无法处理复杂数据?

时间:2016-04-18 22:38:47

标签: javascript angularjs json filter angular-ui-grid

我使用的是UI-Grid,我有一些复杂的数据,我尝试使用过滤器来使用他们的单个过滤器示例。如果我使用简单的选择器,一切都很好。第二个我尝试在同一个节点内停止工作的其他数据。

我的plnkr是here

这是我的过滤器功能。如果我要改变地址。状态'发送电子邮件'它会开始工作:

  $scope.singleFilter = function( renderableRows ){
    var matcher = new RegExp($scope.filterValue);
    renderableRows.forEach( function( row ) {
      var match = false;
      [ 'name', 'company', 'address.state' ].forEach(function( field ){
        if ( row.entity[field].match(matcher) ){
          match = true;
        }
      });
      if ( !match ){
        row.visible = false;
      }
    });
    return renderableRows;
  };

这是data.json中的一个节点,因此您可以了解数据结构:

{
    "id": 0,
    "guid": "de3db502-0a33-4e47-a0bb-35b6235503ca",
    "isActive": false,
    "balance": "$3,489.00",
    "picture": "http://placehold.it/32x32",
    "age": 30,
    "name": "Sandoval Mclean",
    "gender": "male",
    "company": "Zolavo",
    "email": "sandovalmclean@zolavo.com",
    "phone": "+1 (902) 569-2412",
    "address": {
        "street": 317,
        "city": "Blairstown",
        "state": "Maine",
        "zip": 390
    },
    "about": "Fugiat velit laboris sit est. Amet eu consectetur reprehenderit proident irure non. Adipisicing mollit veniam enim veniam officia anim proident excepteur deserunt consectetur aliquip et irure. Elit aliquip laborum qui elit consectetur sit proident adipisicing.\r\n",
    "registered": "1991-02-21T23:02:31+06:00",
    "friends": [
        {
            "id": 0,
            "name": "Rosanne Barrett"
        },
        {
            "id": 1,
            "name": "Nita Chase"
        },
        {
            "id": 2,
            "name": "Briggs Stark"
        }
    ]
},

1 个答案:

答案 0 :(得分:1)

您不能使用括号表示法选择多个级别的数组,因此您的错误;括号表示法等同于点表示法。你可以设计一个函数来梳理几个级别的间隔(比如this SO answer),或者只是添加另一个if条件来检查字段是否有一个点,并使用split来转换它成阵列。如果您的数组中只有几个项目,后者可能更容易。

   [ 'name', 'company', 'address.state' ].forEach(function( field ){
    if (field.indexOf('.') !== '-1' ) {
        field = field.split('.');
    }
        if ( row.entity.hasOwnProperty(field) && row.entity[field].match(matcher) || field.length === 2 && row.entity[field[0]][field[1]].match(matcher)){
          match = true;
        }
      });