Angular-slickgrid custum格式化程序-引导ngbTooltip不起作用

时间:2019-10-25 06:05:32

标签: angular bootstrap-4 slickgrid

我在带有bootstrap 4的角度应用程序中使用angular-slickgrid。我在一栏使用custum格式化程序,详细说明如下:

(cusum.formatter.ts文件中的)客户格式化程序代码:

export const detailFormatter: Formatter = (row: number, cell: number, value: any, columnDef: Column, dataContext: any, grid?: any) => {
const template = `<button ngbTooltip="Details" class="btn btn-outline-secondary mr-2 btn-floating btn-blue-grey btn-sm"><i class="fa fa-info"></i></button>`;
return template; }

以下是在angular-silkgrid中使用上述custum格式化程序的代码:

 this.columnDefinitions = [{formatter: detailFormatter,  id: 'detail', name: '', field: 'detail', minWidth: 50,width: 50, maxWidth: 50}, ....other columns}

在运行该应用程序时,我已检查到看不到“详细信息”。因此,问题在于bootstrap ngbTooltip无法与angular-slickgrid中的custum格式化程序一起使用。

1 个答案:

答案 0 :(得分:0)

请注意,我是Angular-Slickgrid的作者。

您不能直接在Formatter中使用Angular,原因是因为此库是javascript / jQuery库的包装,并且Formatter需要同步函数,该函数立即返回字符串(以html格式),并且Angular 不会立即返回,则至少需要1个周期才能返回。

答案在此DemoComponent的代码中。您需要使用asyncPostRender

从该演示中获取代码示例

export class MyComponent implements OnInit {
  prepareGrid() {
    this.columnDefinitions = [
      {
        id: 'assignee2',
        name: 'Assignee with Angular Component',
        field: 'assignee',
        filterable: true,

        // to load an Angular Component, you cannot use a Formatter since Angular needs at least 1 cycle to render everything
        // you can use a PostRenderer but you will visually see the data appearing,
        // which is why it's still better to use regular Formatter (with jQuery if need be) instead of Angular Component
        asyncPostRender: this.renderAngularComponent.bind(this),
        params: {
          component: CustomTitleFormatterComponent,
          angularUtilService: this.angularUtilService,
          complexFieldLabel: 'assignee.name' // for the exportCustomFormatter
        },
        exportCustomFormatter: Formatters.complexObject,
      }
    ]; 

    this.gridOptions = {
      asyncEditorLoading: false,
      enableAsyncPostRender: true, // for the Angular PostRenderer, don't forget to enable it
      asyncPostRenderDelay: 0,    // also make sure to remove any delay to render it
    };
  }
}

但是,我强烈建议您考虑使用普通的html javascript自定义格式化程序。原因很简单,因为将具有Angular的Formatter定义为异步,所以它们的运行速度要慢得多(由于渲染需要一个周期,因此它们会在网格中加载/渲染)。

它可以工作,但是是的,我强烈建议仅考虑使用纯HTML格式器(尽管我添加了一个演示,但我从未使用Angular Formatters)。