[英]Active class not reactive on the first load using vue.js
所以我正在构建一个选项卡组件并使用:class 像这样绑定活动的 class 。
<nav class="tabs__header" >
<ul>
<li>
<a
ref="tabItems"
v-for="(tabItem, idx) in tabs"
:key="tabItem.idx"
:class="{ 'b-active': idx === selectedIndex }"
@click="changeTab(idx)">
<span v-if="icon"> {{ tabIcon }} </span>
{{ tabItem.name }}
</a>
</li>
</ul>
</nav>
selectedIndex 在第一次 mount() 时使用 tabIndex 值设置,并根据之后选择的 'idx' 进行更新。 如果我们手动单击选项卡,我对 b-active class 没有问题,但它不会绑定在 mount() 中分配的 tabIndex 值。
这是我用来直接添加值“0”进行测试但仍然没有得到任何东西的脚本。
props: {
tabIndex: {
type: String,
default: '0'
},
mounted() { this.selectedIndex = this.tabIndex }
谁能帮我? 因为它看起来很简单,我两天都想不通
在初始渲染idx
似乎未定义。
替换这个:
:key="tabItem.idx"
有了这个:
:key="idx"
现在应该可以正常工作了。
或者,您可以使用v-for
类似:
v-for="tabItem in tabs"
现在,使用tabItem.idx
就像在其他人(如tabItem.name
一样)中工作得很好。
所以,这里是你的代码更新:
<nav class="tabs__header" >
<ul>
<li>
<a
ref="tabItems"
v-for="tabItem in tabs"
:key="tabItem.idx"
:class="{ 'b-active': tabItem.idx == selectedIndex }"
@click="changeTab(idx)">
<span v-if="icon"> {{ tabItem.icon }} </span>
{{ tabItem.name }}
</a>
</li>
</ul>
</nav>
问题解决了,原来是数据类型问题,显然tabIndex
是一个字符串,而selectedIndex
是一个数字。 我变了:
:class="{ 'b-active': idx === selectedIndex }"
至:
:class="{ 'b-active': idx == selectedIndex }"
它奏效了!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.