Vue.js - 如何为活动菜单 link 赋予动态颜色
Vue.js - How to give the active menu link a dynamic colour
正如标题所暗示的那样,我试图在每个菜单项处于活动状态时为其赋予不同的颜色。我试图通过遵循这两个代码示例来实现这一点
1 -> https://codepen.io/Ranushka/pen/KKPBYQv
2 -> https://codepen.io/Ranushka/pen/ZEzjdrO
但我很挣扎,因为在这些示例中,他们使用的是 for 循环。所以我尝试调整代码,但对我来说并不奏效。
你可以在这里找到我的代码 -> https://codepen.io/GY22/pen/vYNeOvQ
<nav class="nav bg-darkGrey fixed w-full z-10 top-0 shadow">
<div class="w-full flex-grow lg:flex lg:items-center lg:w-auto lg:block mt-2 lg:mt-0 bg-darkGrey z-20">
<ul class="list-reset lg:flex flex-1 items-center px-4 md:px-0">
<li class="mr-6 my-2 md:my-0">
<router-link :to="/page1" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline
hover:text-red-800 border-b-4 border-gray-900 hover:border-red-800">
<i class="fas fa-th-large fa-fw mr-3"></i>
<span class="pb-1 md:pb-0 text-sm uppercase">Dashboard</span>
</router-link>
</li>
<li class="mr-6 my-2 md:my-0">
<router-link :to="/page2" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline
hover:text-blue-400 border-b-4 border-gray-900 hover:border-blue-400">
<i class="fas fa-th-large fa-fw mr-3"></i>
<span class="pb-1 md:pb-0 text-sm uppercase">Users</span>
</router-link>
</li>
<li class="mr-6 my-2 md:my-0">
<router-link :to="/page3" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline
hover:text-pink-400 border-b-4 border-gray-900 hover:border-pink-400">
<i class="fas fa-th-large fa-fw mr-3"></i>
<span class="pb-1 md:pb-0 text-sm uppercase">Posts</span>
</router-link>
</li>
</ul>
</div>
</nav>
这就是我想要达到的目标
我希望有人能引导我朝着正确的方向前进。提前致谢
如果你需要严格使用 vue:
为每个 link 添加事件并绑定 class,例如:
<router-link @click.native="isActive = 'dashboard'" :to="/page1" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline hover:text-red-800 border-b-4 border-gray-900 hover:border-red-800" v-bind:class="{ active: isActive == 'dashboard'" }>
仪表盘
然后在你定义的数据中:
isActive: ''
或者例如,如果您希望仪表板 link 在您打开页面时处于活动状态:
isActive: 'dashboard'
然后你定义活动样式:
<style>
.active {
color: green;
}
</style>
这只是一个示例,您可以将class绑定到您需要的元素上,并根据需要设置活动class。
所以我终于让它工作了,但是以一种非常简单的方式,无需绑定和单击....
所以解决方案只是将您选择的 css class 添加到路由器 link 并且当 link 处于活动状态时它已经具有 . router-link-exact-active class 然后只需添加 css 样式
所以代码应该是这样的:
<router-link class="menuItem-active-link" :to="{name: 'dashboard'}">Dashboard</router-link>
.router-link-exact-active.menuItem-active-link{
border-bottom-color: #F19238;
color:#F19238
}
正如标题所暗示的那样,我试图在每个菜单项处于活动状态时为其赋予不同的颜色。我试图通过遵循这两个代码示例来实现这一点
1 -> https://codepen.io/Ranushka/pen/KKPBYQv
2 -> https://codepen.io/Ranushka/pen/ZEzjdrO
但我很挣扎,因为在这些示例中,他们使用的是 for 循环。所以我尝试调整代码,但对我来说并不奏效。
你可以在这里找到我的代码 -> https://codepen.io/GY22/pen/vYNeOvQ
<nav class="nav bg-darkGrey fixed w-full z-10 top-0 shadow">
<div class="w-full flex-grow lg:flex lg:items-center lg:w-auto lg:block mt-2 lg:mt-0 bg-darkGrey z-20">
<ul class="list-reset lg:flex flex-1 items-center px-4 md:px-0">
<li class="mr-6 my-2 md:my-0">
<router-link :to="/page1" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline
hover:text-red-800 border-b-4 border-gray-900 hover:border-red-800">
<i class="fas fa-th-large fa-fw mr-3"></i>
<span class="pb-1 md:pb-0 text-sm uppercase">Dashboard</span>
</router-link>
</li>
<li class="mr-6 my-2 md:my-0">
<router-link :to="/page2" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline
hover:text-blue-400 border-b-4 border-gray-900 hover:border-blue-400">
<i class="fas fa-th-large fa-fw mr-3"></i>
<span class="pb-1 md:pb-0 text-sm uppercase">Users</span>
</router-link>
</li>
<li class="mr-6 my-2 md:my-0">
<router-link :to="/page3" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline
hover:text-pink-400 border-b-4 border-gray-900 hover:border-pink-400">
<i class="fas fa-th-large fa-fw mr-3"></i>
<span class="pb-1 md:pb-0 text-sm uppercase">Posts</span>
</router-link>
</li>
</ul>
</div>
</nav>
这就是我想要达到的目标
我希望有人能引导我朝着正确的方向前进。提前致谢
如果你需要严格使用 vue:
为每个 link 添加事件并绑定 class,例如:
<router-link @click.native="isActive = 'dashboard'" :to="/page1" class="block py-1 md:py-3 pl-1 align-middle text-grey-900 no-underline hover:text-red-800 border-b-4 border-gray-900 hover:border-red-800" v-bind:class="{ active: isActive == 'dashboard'" }>
仪表盘
然后在你定义的数据中:
isActive: ''
或者例如,如果您希望仪表板 link 在您打开页面时处于活动状态:
isActive: 'dashboard'
然后你定义活动样式:
<style>
.active {
color: green;
}
</style>
这只是一个示例,您可以将class绑定到您需要的元素上,并根据需要设置活动class。
所以我终于让它工作了,但是以一种非常简单的方式,无需绑定和单击....
所以解决方案只是将您选择的 css class 添加到路由器 link 并且当 link 处于活动状态时它已经具有 . router-link-exact-active class 然后只需添加 css 样式
所以代码应该是这样的:
<router-link class="menuItem-active-link" :to="{name: 'dashboard'}">Dashboard</router-link>
.router-link-exact-active.menuItem-active-link{
border-bottom-color: #F19238;
color:#F19238
}