ag-grid 中的可点击 url 值与反应
Clickable url value in ag-grid with react
我目前正在 ag-grid
尝试构建一个 table 如果用户单击列值,他们将被带到包含该条目详细信息的页面。
如何使 ag-grid 中的单元格值可点击?
我试过使用 valueGetter: this.urlValueGetter
和 columnDefs
以及:
urlValueGetter(params) {
return '<a href=\'bill/' + params.data.id + '\'>details</a>';
}
但现在看起来像这样:
然后我尝试使用 template: '<a href=\'bill/{id}\'>details</a>'
,它确实将单元格文本显示为可点击,但 id 没有被替换。如果我能以某种方式传入 id,我想这会起作用吗?
您想为此使用 cellRenderer
,而不是 valueGetter
:
https://www.ag-grid.com/javascript-grid-cell-rendering-components/#gsc.tab=0
上述文档中的随机示例:
// put the value in bold
colDef.cellRenderer = function(params) {
return '<b>' + params.value.toUpperCase() + '</b>';
}
如果您不想附加任何事件,您可以使用 link return 字符串(更简单)。
否则,这里有一个 colDef
示例,如果您想将事件附加到元素:
{
headerName: 'ID',
field: 'id',
cellRenderer: (params) => {
var link = document.createElement('a');
link.href = '#';
link.innerText = params.value;
link.addEventListener('click', (e) => {
e.preventDefault();
console.log(params.data.id);
});
return link;
}
}
既然您已经使用过 React,您应该改用 frameworkComponent
。有人提到 React 的开销,但因为这是一个非常简单的组件,所以我认为在这种情况下它并不重要。
无论如何,这是示例设置。
function LinkComponent(props: ICellRendererParams) {
return (
<a href={"https://yourwebsite/entity/detail?id=" + props.value}>
{props.value}
</a>
);
}
...
// in your render method
<AgGridReact
{...}
columnDefs={[...,{
headerName: "Detail",
field: "detail",
cellRenderer: "LinkComponent"
}]}
frameworkComponents={{
LinkComponent
}}
/>
实例
我目前正在 ag-grid
尝试构建一个 table 如果用户单击列值,他们将被带到包含该条目详细信息的页面。
如何使 ag-grid 中的单元格值可点击?
我试过使用 valueGetter: this.urlValueGetter
和 columnDefs
以及:
urlValueGetter(params) {
return '<a href=\'bill/' + params.data.id + '\'>details</a>';
}
但现在看起来像这样:
然后我尝试使用 template: '<a href=\'bill/{id}\'>details</a>'
,它确实将单元格文本显示为可点击,但 id 没有被替换。如果我能以某种方式传入 id,我想这会起作用吗?
您想为此使用 cellRenderer
,而不是 valueGetter
:
https://www.ag-grid.com/javascript-grid-cell-rendering-components/#gsc.tab=0
上述文档中的随机示例:
// put the value in bold
colDef.cellRenderer = function(params) {
return '<b>' + params.value.toUpperCase() + '</b>';
}
如果您不想附加任何事件,您可以使用 link return 字符串(更简单)。
否则,这里有一个 colDef
示例,如果您想将事件附加到元素:
{
headerName: 'ID',
field: 'id',
cellRenderer: (params) => {
var link = document.createElement('a');
link.href = '#';
link.innerText = params.value;
link.addEventListener('click', (e) => {
e.preventDefault();
console.log(params.data.id);
});
return link;
}
}
既然您已经使用过 React,您应该改用 frameworkComponent
。有人提到 React 的开销,但因为这是一个非常简单的组件,所以我认为在这种情况下它并不重要。
无论如何,这是示例设置。
function LinkComponent(props: ICellRendererParams) {
return (
<a href={"https://yourwebsite/entity/detail?id=" + props.value}>
{props.value}
</a>
);
}
...
// in your render method
<AgGridReact
{...}
columnDefs={[...,{
headerName: "Detail",
field: "detail",
cellRenderer: "LinkComponent"
}]}
frameworkComponents={{
LinkComponent
}}
/>