【问题标题】:First tab to be selected by default默认选择的第一个选项卡
【发布时间】:2021-03-21 23:16:29
【问题描述】:

我有一个 vuejs/vuetify 应用程序,它具有使用 v-tabs/v-tab 组件在页面之间导航的标签栏。幸运的是,当单击选项卡时,会获取当前数据,但我需要的是在进入应用程序时,默认情况下应该打开或选择一个选项卡。 这是标签组件:

<v-tabs  v-model="tab">
  <v-tab  v-for="file in selectedFiles" :currentTab="currentTab" :key="file.name"  @drop="onDrop($event, file)" @click="onTabSelect(file)">{{ file.name }}
  </v-tab>
  <v-spacer/>
</v-tabs>

以及 FileTabs 的参考:

   export default {       
      name: 'FileTabs',
      data () {
        return {
          tab: false
        }
      },
      props: {
        selectedFile: null,
        selectedFiles: null
      },
      mounted () {
        this.tab = this.calcFileIndex()
      },
      watch: {
        selectedFile () {
          this.tab = this.calcFileIndex()
        }
      },
      methods: {
        onTabSelect (file) {
          this.$emit('select', file)
        },
        deleteTableRow: function (idx) {
          return this.selectedFiles.splice(idx, 1)
        },
        calcFileIndex () {
          if (this.selectedFile === 1) {
            return this.tab
          }
          const idx = this.selectedFiles.findIndex(({ name }) => name === this.selectedFile.name)
          if (idx < 0) {
            return this.tab
          }
          return idx
        }
      }
    }

我需要默认选择第一个标签。 有人可以告诉我该怎么做或建议我怎么做吗?

提前谢谢你,祝你今天愉快:)

【问题讨论】:

  • 将默认值设置为data(){return {tab:defaultTab}}
  • @DanielaC.Montenegro 谢谢你的回答,我很感激。我试图设置 'tab: defaultTab' 但它不起作用。我应该在某处声明“defaultTab”还是它是如何工作的?对不起,我是 vuejs 的新手
  • 你是如何声明标签列表的?
  • @DanielaC.Montenegro 我从另一个组件调用的选项卡,如下所示:` ` 数据在哪里: ` data () { return { selectedFile: { code: null }, selectedFiles: [] } },mounted () { this .selectedFiles = [] }, `
  • 好的,那么您正在使用 selectedFile 设置选项卡索引?

标签: vue.js vuejs2 vue-component vuetify.js vuex


【解决方案1】:

改变指数计算背后的逻辑:

        calcFileIndex () {
          return this.selectedFile === 1    
                         ?    1
                         :    this.selectedFiles.findIndex(({ name }) => name === this.selectedFile.name);
        }

然后在你的观察者中,验证索引:

        selectedFile () {
          let index = this.calcFileIndex()
          if(index>0) 
              this.tab = index;
          else 
              this.tab = 1;
        }

另外,最好设置props,如果是numeric,则把type设为numeric,并验证它是否大于零:

props:{
    selectedFile:{
       type:Number,
       default:1,
       validator:function(value){return value>0;}
    }
}

您可以在docs查看更多类型,以避免出现奇怪的错误。

【讨论】:

  • 第一个标签索引不为零?
  • 我不是代码所有者,你不妨在问题 cmets.我这样做是考虑到数据库中的 id 而不是列表中的索引。
  • @DanielaC.Montenegro 我更改了您编写的代码,但显示与以前相同。默认情况下,它没有被选中第一个选项卡。奇怪的是不工作..
  • 打开 Vue Devtools 并捕获 tab 值,供我们查看。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-03-06
  • 2019-05-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多