我正在尝试在 ag-grid 组件中使用 font-awesome,但我找不到使用我之前为 Vue 3 安装的 font-awesome 自定义 ag-grid 图标的正确方法。
这是我在 vuejs 3 中使用 font-awesome 的方式:
main.js
import { createApp } from 'vue'
import { FontAwesomeIcon } from '@fortawesome/vue-fontawesome'
import { library } from '@fortawesome/fontawesome-svg-core'
import { fas } from '@fortawesome/free-solid-svg-icons'
import App from './App.vue'
import router from './router'
import store from './store'
import '@/assets/styles/index.scss'
library.add(fas)
createApp(App)
.use(router)
.use(store)
.component('font-awesome-icon', FontAwesomeIcon)
.mount('#app')
然后在模板上我使用这样的图标,一切正常:
<button
class="absolute right-2 mr-1 focus:outline-none focus:ring"
aria-label="search"
>
<font-awesome-icon icon="search" />
</button>
现在,按照ag-grid 手册,我创建了一个 BaseGrid 组件,我在其中设置了 ag-grid。为了尝试替换原始的 ag-grid 主题图标,我将属性“icons”传递给组件并尝试替换组件的 beforeMount 方法上的图标:
<template>
<div>
<ag-grid-vue
:columnDefs="columnDefs"
:icons="icons"
:rowData="rowData"
@first-data-rendered="onFirstDataRendered"
class="ag-theme-alpine"
defaultColDef="defaultColDef"
domLayout="autoHeight"
>
</ag-grid-vue>
</div>
</template>
<script>
import { AgGridVue } from 'ag-grid-vue3'
export default {
data() {
return {
columnDefs: null,
defaultColDef: { resizable: true },
rowData: null,
gridApi: null,
columnApi: null,
icons: null,
}
},
computed: {},
components: {
AgGridVue,
},
mounted() {
this.rowData = this.$store.getters.rowData
},
beforeMount() {
this.columnDefs = [
{ field: 'status', sortable: true, checkboxSelection: true },
{ field: 'id', sortable: true },
{ field: 'assignee', sortable: true },
{ field: 'brand', sortable: true },
{ field: 'requested', sortable: true },
{ field: 'updated', sortable: true },
{ field: 'subject', sortable: true },
{ field: 'requester', sortable: true },
{ field: 'language', sortable: true },
]
this.icons = {
sortAscending: '<font-awesome-icon icon="user-secret" />',
sortDescending: '<font-awesome-icon icon="user-secret" />',
}
},
methods: {
onFirstDataRendered(params) {
params.api.sizeColumnsToFit()
},
},
}
</script>
所以这里的问题在于 ag-grid 需要传递新图标的方式,这就像一个字符串,如果你看到这部分代码:
this.icons = {
sortAscending: '<font-awesome-icon icon="user-secret" />',
sortDescending: '<font-awesome-icon icon="user-secret" />',
}
这是“工作”,因为我在标记中确实有“ <font-awesome-icon icon="user-secret" />
”作为字符串,但正如您可以想象的那样,这不是我想要的工作方式,因为没有显示字体真棒图标。我的问题是,如果有什么方法可以让我的字体真棒实现与 ag-grid 一起工作,还是我必须改变我的方法才能用字体真棒的图标替换 ag-grid 原始图标?