Я использую angular (^ 8.2.14) и ag-grid-community (^ 20.1.0).
Я пытаюсь добиться следующего эффекта: когда пользователь наводит указатель c строка, в одном столбце показана дополнительная кнопка, на которую можно нажать.
Что работает? Столбец с требуемым поведением обрабатывается пользовательским компонентом средства визуализации ячеек, который реализует интерфейс ICellRendererAngularComponent . Там я могу внедрить ElementRef и в ловушку жизненного цикла AfterContentChecked Я проверяю родительский родительский класс для css -класса 'ag-row-hover' и, если он там есть, я покажу эту дополнительную кнопку в компонент рендерера.
custom-cell.component.ts
@Component({
selector: 'app-custom-cell',
template: `
<ng-container *ngIf="hovered; else notHovered">{{form.value * form.value}}
<button (click)="doStuff(form.value)">show root</button></ng-container>
<ng-template #notHovered>{{form.value + form.value}}</ng-template>
`,
})
export class CustomCellComponent implements ICellRendererAngularComp, AfterContentChecked {
form: FormControl;
params: ICellRendererParams;
hovered = false;
constructor(private elementRef: ElementRef) {
}
doStuff(val) {
alert(val);
}
ngAfterContentChecked() {
this.hovered = (this.elementRef.nativeElement as HTMLElement)
.parentElement
.parentElement
.classList.contains('ag-row-hover');
}
}
Исходный код для этого на github
Что я хочу улучшить? Я хочу улучшить производительность и не имея явных проверок на это поведение. Я предпочел бы иметь директиву с css -селектором '.ag-row', которую я могу вставить в ICellRendererAngularComponent, а затем проверять наличие css класса '.ag-row-hover' при каждой проверке. Или иметь директиву с css -селектором '.ag-row-hover', который есть или нет. У кого-нибудь есть идеи, как улучшить мое существующее решение?