【问题标题】:How to set active class on anchor tag with Vue dynamic list如何使用 Vue 动态列表在锚标记上设置活动类
【发布时间】:2020-08-12 19:58:57
【问题描述】:

我正在尝试使用以下代码在 Vue Bootstrap 中为选项卡式导航呈现动态列表:

<b-nav-item v-for="(page, i) in pageTabs" :key="page"
  @click="$emit(`${page}Clicked`); setActive(i);" 
  :class="{ 'active': activeIndex === i }">{{ page | capitalize }}</b-nav-item>

然后为每个项目生成以下 HTML:

<li class="nav-item"><a target="_self" href="#" class="nav-link">Home</a></li>

我遇到的问题是,当在页面上生成 html 时,活动类在列表项标记上,而不是在锚标记上。

有没有办法确保将类添加到锚标记中?

【问题讨论】:

  • 经过进一步的故障排除后,我可以看到使用 b-nav-item 的活动类被放置在锚标记上,如果其编写如下: 而不是 class=" active" - 是否可以通过这种方式呈现动态列表?

标签: javascript vue.js bootstrap-vue


【解决方案1】:

我假设 &lt;b-nav-item&gt; 看起来像:

<template>
<li class="nav-item"><a target="_self" href="#" class="nav-link">Home</a></li>
</template>

Vue 自动将 class 属性继承给组件的包装元素。在您的情况下,它是&lt;li&gt;。要改变这一点,你必须选择:

创建一个类似anchorClass 的道具并将其放在你的锚标签上:

<template>
<li class="nav-item"><a target="_self" href="#" :class="['nav-link', anchorClass]">Home</a></li>
</template>

然后你可以像这样使用它:

<b-nav-item v-for="(page, i) in pageTabs" :key="page"
  @click="$emit(`${page}Clicked`); setActive(i);" 
  :anchorClass="{ 'active': activeIndex === i }">{{ page | capitalize }}</b-nav-item>

或者您只是更改属性的继承,例如:

<template>
<li class="nav-item"><a target="_self" href="#" v-bind="$attrs">Home</a></li>
</template>

但请注意这一点,因为这意味着您在 &lt;b-nav-item&gt; 上设置的所有属性将始终位于锚标记上,而不是 &lt;li&gt; 上!

希望有帮助!

【讨论】:

  • 您好,感谢您的回答!在经历这个过程时,我还发现我可以这样做:active="{ activeIndex === i }" - 这是一个合适的解决方案还是有任何问题?
  • 如果您使用activethen 在组件内部切换类,是的,这也是正确的。这也更安全,因为活动类是在组件内部而不是在组件外部处理的。因此,您将始终确定使用的是哪个类。
猜你喜欢
  • 2020-08-12
  • 1970-01-01
  • 2019-05-16
  • 2020-03-09
  • 1970-01-01
  • 2017-07-09
  • 1970-01-01
  • 2020-07-17
  • 1970-01-01
相关资源
最近更新 更多