【问题标题】:ngx-datatable: Column not sortable when using headerTemplate?ngx-datatable:使用 headerTemplate 时列不可排序?
【发布时间】:2020-04-17 10:46:51
【问题描述】:

Angular 8 和 ngx-datatable 16.0.2:

我已经开始使用 ngx-datatable,并且在使用 headerTemplate 时遇到了一些挑战。我的列定义是这样的:

this.columns = [
  {
    prop: 'name',
    name: 'Navn',
    headerTemplate: this.headerTpl,
    flexGrow: 3
  },
  ...
];

我的 headerTemplate 是这样声明的:

@ViewChild('headerTpl', null) headerTpl: TemplateRef<any>;

在我的 HTML 中:

  <ng-template #headerTpl let-column="column">
    <div class="column-headlines">{{ column.name }}</div>
  </ng-template>

问题是应用了 column-headlines 类的 css,但该列不可排序。当我从列定义中删除 headerTemplate: this.headerTpl 时,排序工作得很好(但样式当然是错误的)。我在这里错过了什么?

这是一个StackBlitz,我希望我的列标题已经设置样式和可排序。

这一切似乎都与模板的使用有关。一旦它开始发挥作用,其他一切都会变得混乱......

【问题讨论】:

  • 你能提供最小的stackblitz吗?
  • 将 StackBlitz 添加到 OP

标签: angular ngx-datatable


【解决方案1】:

ngx-datatable的github项目中有一个已关闭的issue:https://github.com/swimlane/ngx-datatable/issues/1807

它说你必须在 ng-template 中添加一个let-sort="sortFn" 并在其内容中插入一个(click)="sort()"。如果您还想改变鼠标光标,可以在内容中插入class="datatable-header-cell-wrapper"

<!-- header templates-->
<ng-template #hdrTmpl let-sort="sortFn">
    <span class="datatable-header-cell-wrapper" (click)="sort()">
        header content goes here
    </span>
</ng-template>

【讨论】:

    【解决方案2】:

    这是因为 this.headerTpl 在构造函数时尚未设置。这将在ngAfterViewInit 钩子上可用,(如果您使用{static: true},则为ngOnInit):

    ngAfterViewInit() {
      this.columns = [{
        prop: 'name',
        name: 'Navn',
        headerTemplate: this.headerTpl
      }]
    }
    

    stack

    【讨论】:

    • 好的,所以我尝试将列初始化移动到 ngAfterViewInit() 但没有任何变化。应用了实际模板,但该列仍然不可排序。我什至尝试将 sortable: true 添加到列定义中。还有其他想法吗?
    • 我已经更新了我原来的 StackBlitz。将列 init 移动到 ngAfterViewInit() 并且排序停止工作:-(
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多