具有嵌套属性的ng-table过滤器

Pio*_*app 5 angularjs ngtable

我有以下JSON:

  [{
    "Id": "1",
    "Data": {"Str1": "Ann", "Str2": "Xenna"}
  },{
    "Id": "2",
    "Data": {"Str1": "Bob","Str2": "Bobby"},
  }]
Run Code Online (Sandbox Code Playgroud)

我创建了ng-table来显示它.我试着添加过滤器.当我按Id过滤时,一切都按预期工作(过滤器是{ "Id": "2" }).但我无法创建适当的过滤器Str1Str2字段.我已经尝试过:

  1. { "Str1": "A" }
  2. { "Data.Str1": "A" }
  3. { "Data['Str1']": "A" }

但上面的选项不起作用.

我的工作示例如下:http://plnkr.co/edit/MyJCqTlgvKLtSP63FYQY?p = preview

更新

感谢@Blackhole我创建了过滤器{Data: {Str1: 'A'}}.但我只能在代码中进行delcare.当我尝试在HTML中添加这样的内容时,它甚至不会显示过滤器:

  <td data-title="'Str1'" filter="{Data:{Str1: 'text'}}">
    {{ user.Data.Str1 }}
  </td>
Run Code Online (Sandbox Code Playgroud)

Kos*_*kin 2

当您尝试filter="{Data:{Str1: 'text'}}"在html中使用时,输入没有在标题中显示模板的原因,请查看源代码

<div ng-repeat="(name, filter) in column.filter"> //!!!! right here it's not supported
        <div ng-if="column.filterTemplateURL" ng-show="column.filterTemplateURL">
            <div ng-include="column.filterTemplateURL"></div>
        </div>
        <div ng-if="!column.filterTemplateURL" ng-show="!column.filterTemplateURL">
            <div ng-include="'ng-table/filters/' + filter + '.html'"></div>
        </div>
    </div>
Run Code Online (Sandbox Code Playgroud)

在这里<div ng-repeat="(name, filter) in column.filter">,它不是深入挖掘嵌套对象

Ngtable默认模板中不支持嵌套过滤器,因此您可以创建自己的模板,该模板将支持它。查看标头模板的示例

笔记

column.filter是如何初始化的,它从标签filter上的属性、源进行解析td

var parsedAttribute = function (attr, defaultValue) {
                        return function (scope) {
                            return $parse(el.attr('x-data-' + attr) || 
                                          el.attr('data-' + attr) || 
                                          el.attr(attr))
                                (scope, {
                                $columns: columns
                            }) || defaultValue;
                        };
                    };

                    var parsedTitle = parsedAttribute('title', ' '),
                        headerTemplateURL = parsedAttribute('header', false),
                        // here
                        filter = parsedAttribute('filter', false)(),
                        filterTemplateURL = false,
                        filterName = false;

                    ...
                    columns.push({
                        ....
                        filter: filter,
Run Code Online (Sandbox Code Playgroud)