UI-Grid Single Filter 不适用于复杂数据?

UI-Grid Single Filter not working with complex data?

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

我的plnkr是here

这是我的过滤功能。如果我将 'address.state' 更改为 'email' 它将开始工作:

  $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": ",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"
        }
    ]
},

您不能 select 数组的多个级别使用括号表示法,因此您的错误;括号表示法等同于点表示法。您可以设计一个函数来梳理多个级别的间隔(如 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;
        }
      });