我有这个由Bootstrap管理的组件,特别是其中一个nav-tabs小部件,当你单击Bootstrap显示和隐藏时。
Bootstrap使用.active
类跟踪单击的项目。并且,在Vue中,我将某个导航初始化为在页面加载时处于活动状态。但是,一旦完成,我希望Vue将.active
类管理完全放到Bootstrap。
<template>
<li class="nav-item" v-if="toshow">
<a class="nav-link" v-bind:id="'nav_' + link"
:class="{ active: isActive }" :aria-expanded="isActive"
v-bind:href="'#'+link" data-toggle="tab" @click="onclick">
{{label_}}
<span v-if="badge" class="badge" :class="badge_level">{{badge}}</span>
<span v-if="dynamic_badge" class="badge" :class="badge_level" >{{badge_value}}</span>
</a>
</li>
</template>
在页面加载时,每个组件都会检查Vuex并确定其id
是否在this.$store.state.active_tab
中 - 这就是设置.active
的内容。
,isActive: function(){
//active_tab is where I specify which tab should be active
//at first
var res = this.link === this.$store.state.active_tab;
return res;
},
v-once
不合适,因为我唯一要禁用的是计算.active
(徽章子需要实时更新)。< / p>
该组件有效,有点。我认为主要是因为this.$store.state.active_tab
的值不会发生变异,因此Vue不会重新渲染。但它充其量似乎很脆弱。
使用Vue仅设置某些变量的初始值,然后放弃控制而不使用v-once
的最佳做法是什么?
答案 0 :(得分:1)
我只需访问a.nav-link
元素,然后直接将.active
类添加到classList
。
您可以在ref
元素链接中添加a.nav-lank
属性,以便:
<a class="nav-link" ref="link" ...>
...
</a>
然后在.active
hook中添加mounted
类:
mounted() {
if (this.link === this.$store.state.active_tab) {
this.$refs.link.classList.add('active');
}
}