gpt4 book ai didi

ag-grid - 是否可以在 ag-Grid-community 中拥有自己的自定义上下文菜单

转载 作者:行者123 更新时间:2023-12-05 03:02:37 25 4
gpt4 key购买 nike

找不到确切的答案。如果我决定选择加入 vanilla JavaScript(非 Angular & Co)ag-Grid-community 版本,我可以轻松地添加我自己的自定义上下文菜单和其他自定义扩展吗?正如我看到他们的文档,上下文菜单只是企业级功能。我看到一些脚踏板有一些警告,但我个人并没有深入挖掘。总的来说,在ag-Grid-community中实现自建功能有多容易。还是自己写网格更好?

最佳答案

在我们的 Angular 项目中,我们有一个自定义上下文菜单组件与 ag-grid 社区,所以这绝对是可能的。

工作原理:

我们在模板中定义所有网格列。如果你想要一个上下文菜单,你将一个空列放入列集中并在其上放置一个特殊指令。该指令接受一个上下文菜单模板,该模板被传递到自定义 cellRendererFramework(基本上是一个菜单触发按钮)。该指令还配置列以确保跨网格实例的外观一致。

如果您需要用鼠标右键单击连续任意位置打开菜单,这可能不是您一直在寻找的东西,但我想触发 应该不难来自不同事件的菜单(查看 ag-grid 事件,可能有合适的东西)。

下面的代码片段应该很简单,以适应您选择的框架。鉴于您选择了 Vanilla JS,您将必须使用常规函数来执行相同的操作,如下所示:

const grid = withContextMenu(new Grid(element, gridOptions), menuOptions)

这是我们如何使用它的示例:

<ag-grid-angular>
<ag-grid-column headerName='ID' field='id'></ag-grid-column>
<ag-grid-column [contextMenu]='menu'>
<mat-menu #menu='matMenu'>
<ng-template matMenuContent let-item='data'>
<button mat-menu-item (click)='restoreSnapshot(item.id)'>Restore From Snapshot</button>
<a mat-menu-item [routerLink]='[item.id, "remove"]'>Remove</a>
</ng-template>
</mat-menu>
</ag-grid-column>
</ag-grid-angular>

应用菜单的指令:

const WIDTH = 42;
export const CONTEXT_MENU_COLID = 'context-menu';

@Directive({
selector: '[agGridContextMenu]'
})
export class AgGridContextMenuDirective implements AfterViewInit {
constructor(private gridComponent: AgGridAngular) {}

@Input()
agGridContextMenu!: ElementRef<MatMenu>;

ngAfterViewInit() {
if (!this.agGridContextMenu) return;
setTimeout(() => {
this.gridComponent.api.setColumnDefs([
...this.gridComponent.columnDefs,
{
colId: CONTEXT_MENU_COLID,
cellRendererFramework: CellRendererContextMenuComponent,
width: WIDTH,
maxWidth: WIDTH,
minWidth: WIDTH,
cellStyle: {padding: 0},
pinned: 'right',
resizable: false,
cellRendererParams: {
suppressHide: true,
contextMenu: {
menu: this.agGridContextMenu
}
}
}
]);
});
}
}

单元格渲染器组件:

@Component({
selector: 'cell-renderer-context-menu',
template: `
<ng-container *ngIf='params.data && params.colDef.cellRendererParams.contextMenu.menu'>
<button
type='button'
mat-icon-button
[matMenuTriggerFor]='params.colDef.cellRendererParams.contextMenu.menu'
[matMenuTriggerData]='{data: params.data}'
>
<mat-icon svgIcon='fas:ellipsis-v'></mat-icon>
</button>
</ng-container>
`,
styleUrls: ['./cell-renderer-context-menu.component.scss']
})
export class CellRendererContextMenuComponent implements ICellRendererAngularComp {
params!: ICellRendererParams;
agInit(params: ICellRendererParams) {
this.params = params;
}
refresh() {
return false;
}
}

截图:

enter image description here

关于ag-grid - 是否可以在 ag-Grid-community 中拥有自己的自定义上下文菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54673589/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com