【问题标题】:ng-table filter with nested properties具有嵌套属性的 ng-table 过滤器
【发布时间】:2014-11-04 08:27:09
【问题描述】:

我有以下 JSON:

  [{
    "Id": "1",
    "Data": {"Str1": "Ann", "Str2": "Xenna"}
  },{
    "Id": "2",
    "Data": {"Str1": "Bob","Str2": "Bobby"},
  }]

我创建了 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'}} 有效。但我只能在代码中对此进行描述。当我尝试将这样的内容放入 HTML 时,它甚至不显示过滤器:

  <td data-title="'Str1'" filter="{Data:{Str1: 'text'}}">
    {{ user.Data.Str1 }}
  </td>

【问题讨论】:

标签: angularjs ngtable


【解决方案1】:

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

<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>

就在这里&lt;div ng-repeat="(name, filter) in column.filter"&gt; 不是挖掘嵌套对象

Ngtable默认模板不支持嵌套过滤器,所以你可以创建自己的模板,它会支持它。看看example of header template

注意

column.filter 是这样初始化的,它是从 td 标签上的 filter 属性解析的,source

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,

【讨论】:

  • @Garath 我很乐意提供帮助!!,除了这个问题对我来说也很有趣)))
  • @KostiaMololkin 你能更新断开的链接吗? “标题模板示例。”
猜你喜欢
  • 2014-05-30
  • 2014-06-21
  • 2020-05-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-31
相关资源
最近更新 更多