Vue Ag-grid 一次隐藏/取消隐藏所有列

Posted

技术标签:

【中文标题】Vue Ag-grid 一次隐藏/取消隐藏所有列【英文标题】:Vue Ag-grid hide/unhide all columns at once 【发布时间】:2020-12-22 15:38:34 【问题描述】:

我正在尝试隐藏和取消隐藏 ag-grid 中父组件的数据更改的所有列。 这是我的子组件

<template>
  <v-card>
    <v-card-title>
      <v-row no-gutters>
        <v-col class="text-right">
          <v-btn color="blue" outlined @click="hideColumns">hide Format</v-btn>
        </v-col>
      </v-row>
    </v-card-title>
    <ag-grid-vue
      //
    ></ag-grid-vue>
  </v-card>
</template>

<script>
//All imports of aggrid

export default 
  name: "DetailsTable",
  props: 
    columnDefs: 
      type: Array,
      default() 
        return null;
      ,
    ,
    rowData: 
      type: Array,
      default() 
        return null;
      ,
    ,
  ,
  components: 
    "ag-grid-vue": AgGridVue,
  ,
  data() 
    return 
      agModule: AllModules,
      newRowData: [],
      gridApi: null,
      gridOptions: ,
    ;
  ,
  watch: 
    rowData: function (newVal, oldVal) 
      this.newRowData = newVal;
    ,
    columnDefs: function (newval, oldval) 
      this.hideColumns();
    ,
  ,
  methods: 
    hideColumns() 
      this.gridOptions.columnApi.getAllColumns().forEach((e) => 
        this.gridOptions.columnApi.setColumnVisible(e.colId, false); //In that case we hide it
      );
    ,
  ,
  mounted() 
    this.newRowData = this.rowData;
    this.gridApi = this.gridOptions.api;
  ,
;
</script>

在父组件中,每当在父组件中调用 api get 时,columnDefs and rowData get 就会重新初始化。现在再次更改 columnDefs 我想隐藏所有列。

【问题讨论】:

【参考方案1】:

setColumnsVisible() 接受一个数字作为参数,它是一个Column.colIdgetAllColumns() 返回一个 Column 的数组,所以这里需要使用 for 循环

const showAllColumn = () => 
  const allColumns = columnApi.getAllColumns().forEach((c) => 
    columnApi.setColumnVisible(c.getColId(), true);
  );
;
const hideAllColumn = () => 
  const allColumns = columnApi.getAllColumns().forEach((c) => 
    columnApi.setColumnVisible(c.getColId(), false);
  );
;

用法

<button onClick=showAllColumn>Show all columns</button>
<button onClick=hideAllColumn>Hide all columns</button>

现场示例

【讨论】:

为什么当我在按钮单击时调用该函数时它会起作用。但是,如果我在更改另一个数据时调用该函数,这些列不会隐藏吗?知道为什么会这样。我正在使用 vuejs 您似乎没有在mounted() 中分配columnApi 我直接使用gridOptions,会不会有问题? 其实没有,我忘了。将设置代码和框示例以查看发生了什么 尝试用@click="hideColumns()"替换@click="hideColumns"

以上是关于Vue Ag-grid 一次隐藏/取消隐藏所有列的主要内容,如果未能解决你的问题,请参考以下文章

Ag-grid 隐藏过滤列

Angular Grid(ag-grid)显示/隐藏不起作用

如果 rowData 为空,如何隐藏 ag-grid?

隐藏 Ag-Grid 中的特定行值 - Angular

使用 Javascript 隐藏或折叠 ag-grid 中的单个特定行

ag-grid angular 5 导出隐藏,列