Обратите внимание, что я являюсь автором Angular-Slickgrid.
Вы не можете использовать Angular напрямую в Formatter, причина в том, что эта библиотека является оболочкой библиотеки javascript / jQuery, а для форматирования требуетсясинхронная функция, которая сразу возвращает строку (в формате html), а Angular не сразу возвращает, вам нужно как минимум 1 цикл, прежде чем она вернется.
Ответ в этом Демо и коде Компонента . Вам нужно использовать 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. Причина в том, что это просто, поскольку Formatter с Angular определяется как асинхронный, они намного медленнее (вы увидите их загрузку / рендеринг в сетке, поскольку для рендеринга требуется цикл).
Это работает, но да, я настоятельно рекомендую пересмотреть вопрос об использовании только простых форматтеров HTML (хотя я и добавил демонстрационную версию, я никогда не использую Angular Formatters).