【问题标题】:Bootstrap-vue - How to show/hide a b-table column programmaticallyBootstrap-vue - 如何以编程方式显示/隐藏 b 表列
【发布时间】:2019-02-12 01:59:14
【问题描述】:

如何根据更改数据模型的某些事件在下面的 BootstrapVue b-table 示例中显示/隐藏列。

<template>
  <button @click="showHideAge=!showHideAge">Show/Hide Age</button>
  <b-table striped hover :items="items"></b-table>
</template>

<script>
const items = [
  { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
  { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
  { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
  { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
]

export default {
  data () {
    return {
      items: items,
      showHideAge: true
    }
  }
}
</script>

【问题讨论】:

    标签: javascript vue.js vuejs2 vue-component bootstrap-vue


    【解决方案1】:

    您可以使用computed 属性根据show/hide age 按钮给出的状态获取人员详细信息

    <template>
        <div>
            <button @click="showHideAge=!showHideAge">Show/Hide Age</button>
            <b-table striped hover :items="persons"></b-table>
        </div>
    </template>
    
    <script>
        const items = [
            { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
            { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
            { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
            { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
        ]
    
        export default {
            data () {
                return {
                    items: items,
                    showHideAge: true
                }
            },
            computed: {
                persons() {
                    if(this.showHideAge) {
                         return this.items
                    } else {
                        return items.map(x => ({
                            isActive: x.isActive,
                            first_name: x.first_name,
                            last_name: x.last_name
                       }))
                    }
                }
            }
        }
    </script>
    

    【讨论】:

      【解决方案2】:

      我意识到这是旧的,但问题仍然有效。标题和单元格有 v 槽。您可以在插槽中的 div 上使用 v-show 来显示/隐藏标题和整个列被隐藏的单元格。

      `<template>
      
      
      <div>
            <button @click="showHideAge=!showHideAge">Show/Hide Age</button>
            <b-table striped hover :items="items">
             <template v-slot:cell(age)="row">
              <div v-show="showHideAge">{{ row.item.age }}</div>
             </template>
             <template v-slot:head(age)="field">
              <div v-show="showHideAge">{{ field.label }}</div>
             </template>
            </b-table>
         </div>
      </template>
      
      <script>
        const items = [
          { isActive: true, age: 40, first_name: 'Dickerson', last_name: 'Macdonald' },
          { isActive: false, age: 21, first_name: 'Larsen', last_name: 'Shaw' },
          { isActive: false, age: 89, first_name: 'Geneva', last_name: 'Wilson' },
          { isActive: true, age: 38, first_name: 'Jami', last_name: 'Carney' }
          ]
      
           export default {
                 data () {
                   return {
                     items: items,
                     showHideAge: true
                    }
                },
               
             }
       </script>`
      

      【讨论】:

      • 这很好用,感谢您的发帖。但是,如果您在最初的 fields 定义上有 sortable: true,则当 showHideAge 为 false 时,仍然会出现 aria 控件。我尝试过使用thClassthStyle、css 覆盖,我无法摆脱插槽上的 aria 排序控件。有什么想法吗?
      猜你喜欢
      • 2018-12-29
      • 1970-01-01
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 1970-01-01
      • 2017-07-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多