为什么这个非常简单的bootstrap vue脚本不起作用,在按下切换按钮时,它不会增加值tabIndex。
-
tabIndex从0开始,用户按下tabIndex,值仍然为0。
-
如果从disabled属性中删除tabIndex,它会起作用,但不会达到我要求的目的。脚本可以在这里看到:https://jsfiddle.net/Xarina/tkoyph4x/1/
<div id="app"> <b-card no-block>{{tabIndex}} <b-tabs small card ref="tabs" v-model="tabIndex"> <b-tab title="General"> I'm the first fading tab </b-tab> <b-tab title="Edit profile" :disabled="tabIndex < 1"> I'm the second tab </b-tab> <b-tab title="Premium Plan" :disabled="tabIndex < 2"> Sibzamini! </b-tab> </b-tabs> </b-card> <button @click="tabIndex++"> Click to toggle disable </button> </div>
发生这种情况是因为您无法切换到禁用的选项卡。检查发生在索引被禁用之前,这意味着它将把选项卡索引设置回0。
您可以通过使用两个数据属性来解决这一问题,一个用于禁用选项卡,另一个用于<b-tabs>
v-model。然后使用更新属性以首先禁用,并在$nextTick
回调中更新v-model属性。
在下面的示例中,当其他属性发生变化时,我使用watcher
自动设置第二个属性。
new Vue({
el: '#app',
data() {
return {
currentTab: 0,
disabledTabIndex: 0
}
},
watch: {
disabledTabIndex(newVal) {
this.$nextTick(() => {
this.currentTab = newVal;
})
}
}
});
<link href="https://unpkg.com/bootstrap@4.5.3/dist/css/bootstrap.min.css" rel="stylesheet" />
<link href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.11/vue.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<div id="app">
<b-card no-block>
Current tab: {{ currentTab }}
<b-tabs small card ref="tabs" v-model="currentTab">
<b-tab title="General">I'm the first fading tab</b-tab>
<b-tab title="Edit profile" :disabled="disabledTabIndex < 1">
I'm the second tab
</b-tab>
<b-tab title="Premium Plan" :disabled="disabledTabIndex < 2">
Sibzamini!
</b-tab>
</b-tabs>
</b-card>
<button @click="disabledTabIndex++">Click to toggle disable</button>
</div>
您可以根据tabIndex
:使用title-item-class
将自定义类绑定到每个tab
window.app = new Vue({
el: '#app',
data: () => ({ tabs: [], tabCounter: 0, disabled: false, tabIndex: 0 }),
});
.disabledTab .nav-link { pointer-events: none; color: #666666; }
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap/dist/css/bootstrap.min.css"/>
<link type="text/css" rel="stylesheet" href="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.css"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/vue/2.5.16/vue.min.js"></script>
<script src="https://unpkg.com/babel-polyfi0ll@latest/dist/polyfill.min.js"></script>
<script src="https://unpkg.com/bootstrap-vue@latest/dist/bootstrap-vue.js"></script>
<div id="app">
<b-card no-block>{{tabIndex}}
<b-tabs small card ref="tabs" v-model="tabIndex">
<b-tab title="General">I'm the first fading tab</b-tab>
<b-tab title="Edit profile" :title-item-class="{ disabledTab: tabIndex < 1 }">I'm the second tab</b-tab>
<b-tab title="Premium Plan" :title-item-class="{ disabledTab: tabIndex < 2 }">Sibzamini!</b-tab>
</b-tabs>
</b-card>
<button @click="tabIndex++">Click to toggle disable</button>
</div>