javascript - 如何使用 Vue 动态列表在锚标记上设置活动类
问题描述
我正在尝试使用以下代码在 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>
看起来像:
<template>
<li class="nav-item"><a target="_self" href="#" class="nav-link">Home</a></li>
</template>
Vue 自动将 class 属性继承到组件的包装元素。在你的情况下,它的<li>
. 要改变这一点,你必须选择:
创建一个类似的道具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>
但请注意这一点,因为这意味着您设置的所有属性<b-nav-item>
将始终落在锚标签上,而不是再出现<li>
了!
希望有帮助!
推荐阅读
- python - 使用 Unix Shell 脚本进行文件解析
- facebook-node-sdk - 广告创意帖子是由处于开发模式的应用创建的。必须在公开场合才能在 Facebook 广告中制作此广告
- r - 将特定列和行求和到 R 中的新矩阵
- python-3.x - 程序不会停止遍历列表
- javascript - 在javascript中一段时间后从URL中删除查询字符串
- mysqli - 在条件中使用逗号分隔值选择表格逗号分隔的列值
- apache-spark - Spark CBO 未显示查询中具有分区列的查询的行数
- android - 错误:程序类型已存在:com.thoughtbot.expandablerecyclerview.BuildConfig
- arrays - 重新排列字典数组
- xamarin - 位置服务未在 Xamarin 的 ios 和 android 背景中运行