【发布时间】:2019-06-23 23:39:39
【问题描述】:
我试图让浮动过滤器的显示由开关或按钮单击来确定。看起来很简单。我应该能够在真假之间切换,将该值提供给网格选项中的浮动过滤器,然后刷新标题对吗?不幸的是,网格似乎总是落后一步。当我第一次单击时,没有任何反应。当我将开关切换回 false 时,浮动过滤器就会出现。然后浮动过滤器将继续出现(当开关为假时)并消失(当开关为真时)。更奇怪的是,如果我切换浮动过滤器开关几次,然后尝试切换 rowGroupPanelShow(我也试图使其可切换),它将触发浮动过滤器切换到以前没有的任何值。但只有一次。
我已经尝试了一些变化。我试过开关和按钮。我尝试过观察者并编写自己的函数来切换真假。我尝试在与切换相同的函数中调用this.gridApi.refreshHeader(),并从它自己的函数中调用它。我试过打电话给this.columnApi.resetColumnState()(用于重置分组)。所有控制台都正确记录,但网格似乎总是落后一步。
这是我从 ag-grid 网站获取并修改以演示行为的 plunker 的链接:https://plnkr.co/edit/Me51NOVOCbmvFxx95WpP?p=preview
这里是开关和网格:
<v-layout row wrap justify-center>
<v-flex xs6 sm2 md2>
<v-switch
class="switch"
color="blue"
id="filterSwitch"
label="Floating Filter"
v-model="filterSwitch"
></v-switch>
</v-flex>
<v-flex xs6 sm2 md2>
<v-switch
class="switch"
color="blue"
id="groupSwitch"
label="Row Grouping Panel"
v-model="groupSwitch"
></v-switch>
</v-flex>
</v-layout>
<div class="buys">
<ag-grid-vue
id="personTableAgGridTest"
style="width: 100%; height: 65vh;"
class="ag-theme-balham"
:columnDefs="columnDefs"
:rowData="rowData"
:cacheBlockSize="cacheBlockSize"
:rowModelType="rowModelType"
:enableColResize="true"
:enableFilter="true"
:enableSorting="true"
:rowSelection="rowSelection"
:animateRows="true"
:floatingFilter="floatingFilter"
:maxConcurrentDatasourceRequests="maxConcurrentDatasourceRequests"
:defaultColDef="defaultColDef"
:columnTypes="columnTypes"
:sideBar="sideBar"
:rowGroupPanelShow="rowGroupPanelShow"
:gridReady="onGridReady"
>
</ag-grid-vue>
这里是相关的绑定数据
export default {
data() {
return {
columnDefs: null,
rowData: null,
cacheBlockSize: 250,
rowSelection: 'multiple',
maxBlocksInCache: 5,
gridApi: null,
columnApi: null,
rowGroupPanelShow: 'always',
floatingFilter: false,
filterSwitch: false,
groupSwitch: false,
rowModelType: 'serverSide',
maxConcurrentDatasourceRequests: 1,
这里是函数/观察者
resetColumns () {
this.columnApi.resetColumnState()
},
refreshHeader2 () {
console.log('in refresh header', this.floatingFilter)
this.gridApi.refreshHeader()
// this.resetColumns()
}
},
watch: {
filterSwitch (val) {
console.log('val', val, this.floatingFilter)
this.floatingFilter = !this.floatingFilter
this.refreshHeader2()
},
预期:是否显示浮动过滤器应由开关切换。将开关的值传递给网格,然后刷新标题即可完成此操作。
实际:网格似乎落后了一步(当开关为假时显示浮动过滤器)。
【问题讨论】:
-
您的问题会通过演示问题更容易回答。您可以尝试从这里开始:plnkr.co/edit/RQcNJT2sKcv65JzNMmeU?p=preview。或来自documentation 的任何其他示例。
-
感谢@thirtydot 的回复。我刚刚添加了一个指向我从 ag-grid 网站上抓取的 plunker 的链接,并对其进行了修改以显示正在发生的事情。 plnkr.co/edit/Me51NOVOCbmvFxx95WpP?p=preview
-
我不太了解 Vue.js,但我对可能发生的事情有所了解。这似乎有帮助:plnkr.co/edit/9NAfPeEu8GgJw7okqz77?p=preview。我不知道“重置列”发生了什么,也没有调查。
-
嘿!我分心了,因为您的解决方案有效,我完全忘记了回到这里说谢谢!它工作得很好。奇怪的是,您必须添加 0ms 的设置超时才能使其工作,但确实如此。谢谢@thirtydot!
-
不客气。我已经写了一个包含更多细节的答案,所以你有一些东西to accept。
标签: javascript vue.js ag-grid