【问题标题】:BootstrapVue conditional column in b-tableb 表中的 BootstrapVue 条件列
【发布时间】:2020-04-26 17:03:02
【问题描述】:

如果当前用户是管理员,我只想显示我的一个列。我不确定如何使用 bootstrapVue 做到这一点。有什么想法吗?

【问题讨论】:

  • 使用计算属性根据某些条件(即管理员访问权限)过滤fields 定义数组,然后将计算属性作为fields 属性值传递给<b-table>。使用Array.prototype.filter() 进行过滤。

标签: twitter-bootstrap vue.js bootstrap-vue


【解决方案1】:

这是基于 Troy 评论的 sn-p。

我向名为requiresAdmin 的字段对象添加了一个自定义属性。这不是标准Bootstrap-Vue 的一部分。

您可以使用它来过滤掉所有要求用户成为计算属性中的管理员的字段。基于用户是否是管理员。这使得添加和删除要求用户成为管理员的字段变得容易。

new Vue({
  el: '#app',
  computed: {
    computedFields() {
      // If the user isn't an admin, filter out fields that require auth.
      if(!this.isUserAdmin)
        return this.fields.filter(field => !field.requiresAdmin);
        
      // If the user IS an admin, return all fields.
      else
        return this.fields;
    }
  },
  data() {
      return {
        isUserAdmin: false,
        fields: [
          { key: 'first', label: 'First Name' },
          { key: 'last', label: 'Last Name' },
          { key: 'age', label: 'Age' },
          { key: 'sex', label: 'Sex' },
          { key: 'secretActions', label: 'Secret Actions', requiresAdmin: true },
        ],
        items: [
          { first: 'John', last: 'Doe', sex: 'Male', age: 42 },
          { first: 'Jane', last: 'Doe', sex: 'Female', age: 36 },
          { first: 'Rubin', last: 'Kincade', sex: 'Male', age: 73 },
          { first: 'Shirley', last: 'Partridge', sex: 'Female', age: 62 }
        ]
      }
    }
})
<link href="https://unpkg.com/bootstrap@4.4.1/dist/css/bootstrap.min.css" rel="stylesheet"/>
<link href="https://unpkg.com/bootstrap-vue@2.3.0/dist/bootstrap-vue.css" rel="stylesheet"/>

<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.6.10/vue.js"></script>
<script src="https://unpkg.com/bootstrap-vue@2.3.0/dist/bootstrap-vue.js"></script>

<div id="app" class="p-3">
  <b-btn @click="isUserAdmin = !isUserAdmin">
    Toggle admin user ({{ isUserAdmin }})
  </b-btn>
  <br /><br />
  <b-table :fields="computedFields" :items="items">
    <template v-slot:cell(secretActions)>
      <b-btn>Edit User</b-btn>
      <b-btn>Delete User</b-btn>
    </template>
  </b-table>
</div>

【讨论】:

  • return this.fields.filter(field => this.isUserAdmin || !field.requiresAdmin);
猜你喜欢
  • 1970-01-01
  • 2021-03-05
  • 2020-08-05
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 1970-01-01
  • 2020-03-30
  • 2021-11-20
相关资源
最近更新 更多