Ранее я обновил пакет AG Grid с 18x до 20.0.0 (версия для сообщества).В предыдущей версии я просто мог передавать строку HTML в свойство colDefs.headerName , и он отображал HTML-код в заголовке.
Эта новая версия отображает данные заголовка и ячейки какстрока по умолчанию.Теперь заголовки столбцов отображаются так:
<span ref="eText" class="ag-header-cell-text" role="columnheader">
"<span id="header-span-1" style="visibility: visible; position: static; display: inline-block; padding-bottom: 5px;">Some Text</span>"
</span>
Я, очевидно, хочу перейти к самому простому решению, которое, похоже, использует Cell Renderer (или что-то подобное, как описано на https://www.ag -grid.com/ javascript-grid-cell-render-components / ), который просто возвращает HTML.Как можно достичь следующего при использовании свойства headerName?
colDef.cellRenderer = function(params) {
var html = '<span id="header-span-1" style="visibility: visible; position: static; display: inline-block; padding-bottom: 5px;">Some Text</span>';
return html;
}
Если это не удастся, кто-нибудь, пожалуйста, предоставит рабочий пример того, как использовать компонент заголовка для того, что мне конкретно нужно?Я видел, где я мог определить шаблон, но это кажется излишним, учитывая, что мне нужно только то, что я описал выше.Я искал вокруг и не могу найти пример.
ОБНОВЛЕНИЕ
Благодаря ответу Доминика ниже, я смог найти решение, котороене требует чрезмерных (и ненужных) усилий.Опять же, для моего конкретного случая использования у меня был ограниченный контроль над данными столбца, возвращаемыми с сервера, но мне нужно было иметь способ его форматирования - помимо функциональности, предоставляемой форматером и AG Grid.getter properties.
В моем проекте определения столбцов предоставляются через класс ...
export class colDefs {
constructor(
public headerName: any,
public field: any,
...
) { }
}
... и реализуется в соответствующих компонентах машинописи, например:
for (var i = 0; i < arr.length; i++) {
... // Do stuff
this.columnDefs[i] = new colDefs(headerName, field, ...);
... // Do stuff
}
Следуя советам Доминика, я просто создал новый класс с именем HTMLRenderer (расширен от HeaderComp ).Я также добавил новое свойство в экспортируемый класс colDefs с именем headerComponent и передаю HTMLRenderer в качестве его значения.
import { HeaderComp } from 'ag-grid-community/dist/lib/headerRendering/header/headerComp';
class HTMLRenderer extends HeaderComp {
init(params) {
super.init(params);
// @ts-ignore: Unreachable code error
this.eGui.querySelector('[ref="eText"]').innerHTML = params.displayName;
}
}
export class colDefs {
constructor(
public headerName: any,
public headerComponent: any = HTMLRenderer,
public field: any,
...
) { }
}
Обратите внимание на комментарий // @ ts-ignore: Недостижимый код комментарий.Это необходимоВ противном случае, если вы используете машинописный текст, он выдаст ошибку и не сможет скомпилировать.
Наконец, в моих компонентах машинописи, которые создают экземпляр класса colDefs , я передаю применимые значения.Но для свойства headerComponent вы ДОЛЖНЫ передать значение undefined, которое в основном говорит о том, что мы хотим использовать значение по умолчанию, определенное в экспортируемом классе:
for (var i = 0; i < arr.length; i++) {
... // Do stuff
this.columnDefs[i] = new colDefs(headerName, undefined, field, ...);
... // Do stuff
}
Это было сделано для меня без излишеств, которые были бы связаны с созданием компонента полного заголовка для небольшой строки HTML в заголовке.HTML в моих заголовках столбцов AG Grid теперь отображается
Обратите внимание, что на самом деле существует другой подход для достижения этой цели, который заключается в изоляции HTMLRenderer в его собственном файле классов.В конечном итоге вам необходимо зарегистрировать его в качестве поставщика в app.module И в каждом файле машинописного текста, в котором вы хотите его использовать ... НЕ говоря уже о том, что вы также должны экспортировать класс И сделать его инъекционным.
Мне кажется, что этот подход слишком трудоемок для небольшого количества HTML, которое есть в заголовках столбцов.