【问题标题】:How to dynamically add a column to Bootstrap Vue Table如何动态添加列到 Bootstrap Vue 表
【发布时间】:2020-05-02 18:10:24
【问题描述】:

我正在使用 Bootstrap Vue 并希望动态添加一列或仅在数据中满足某些条件时才显示该列。我试图了解作用域插槽以及这是否是我应该使用格式化程序回调函数的方向。理想情况下,我只想添加一列“版本 2”,前提是它在数据中可用。我不知道从哪里开始。

代码

    <b-table striped responsive hover :items="episodes" :fields="fields" :filter="filter">
           <template v-slot:cell(version_1)="data">
        <a :href="`${data.value.replace(/[^a-z]-/i,'-').toLowerCase()}`">Definition</a>
      </template>

    </b-table>
</template>
<script>
data() {

    return {
      fields: [{
          key: 'category',
          sortable: true
        },
        {
          key: 'episode_name',
          sortable: true
        },
        {
          key: 'episode_acronym',
          sortable: true
        },
        {
          key: 'version_1',
          sortable: true
        }
      ],
      episodes: [],
      versions: [],
    }

  },   
mounted() {
    return Promise.all([
        // fetch the owner of the blog
        client.getEntries({
          content_type: 'entryEpisodeDefinitions',
          select: 'fields.title,fields.category,fields.slug,fields.episodeAcronym,fields.version,sys.id'
        })

      ])
        .then(response => {
        // console.info(response[0].items);
        return response[0].items
      })
      .then((response) => {

        this.episodes = response.reduce(function( result, item){
          if ( item.fields.version === 1 ) {
          return result.concat({
            category: item.fields.category,
            episode_name: item.fields.title,
            episode_acronym: item.fields.episodeAcronym,
            version_1: 'episodes/' + item.fields.slug + '/' + item.sys.id,
          })
          }
          return result
        }, [])

        this.versions = response.reduce(function( result, item){
          if ( item.fields.version === 2 ) {
          return result.concat({
            version_2: 'episodes/' + item.fields.slug + '/' + item.sys.id,
          })
          }
          return result
        }, [])

        console.info(response);
      })
      .catch(console.error)


  },
</script>

【问题讨论】:

  • 不值得完整回答,但请read the documentation
  • 只是为了澄清。例如,如果没有单个数据具有 version_2。你想隐藏列 version_2
  • 使用计算属性过滤掉传递给&lt;b-table&gt;fields 定义数组中的字段。 fields数组中没有出现的字段将不会显示,
  • @Evan 是的,正确。

标签: javascript vue.js bootstrap-vue


【解决方案1】:

我认为这是您正在寻找的东西:

<b-table :items="items" :fields="fields">
    <template v-for="field in dynamicFields" v-slot:[`cell(${field.key})`]="{ item }">
</b-table>

在脚本中:

this.dynamicFields.push({key: 'someTestKey', label: 'Dynamic Label'})

【讨论】:

  • 是的,这就是我一直在寻找的东西,我能够按照这些思路实现一些东西。谢谢。
猜你喜欢
  • 2020-02-15
  • 2019-12-08
  • 1970-01-01
  • 2019-08-18
  • 2019-03-30
  • 2017-09-01
  • 2022-06-14
  • 2021-12-20
  • 2014-06-14
相关资源
最近更新 更多