Я работаю над проектом vue.js, и в моем компоненте навигации есть несколько ссылок на маршрутизатор в элементе li, как показано ниже
<li
class="m-menu__item m-menu__item--active"
aria-haspopup="true"
id="dashboard"
@click="toggleMenu('dashboard')"
>
<router-link to="/dashboard" class="m-menu__link">
<i class="m-menu__link-icon flaticon-line-graph"></i>
<span class="m-menu__link-title">
<span class="m-menu__link-wrap">
<span class="m-menu__link-text">{{ $t("Dashboard") }}</span>
</span>
</span>
</router-link>
</li>
Что я хочу сделать, так это добавить новый класс в элемент li по пути маршрутизатора-ссылки. используя свойство watch, я мог бы получить текущий маршрут, а остальная работа мне кажется сложной. смотреть свойство, как показано ниже
watch:{
$route (to, from){
console.log(to.path);
$('[to="'+path+'"]').parent().addClass('yourClass'); // i tried this way and it didn't work
}
},
* Обратите внимание, что я не могу сделать это по событию щелчка, потому что я могу перемещаться по ссылкам с помощью панели инструментов. пожалуйста, дайте мне способ сделать это. Спасибо.
2 ответа
Я мог бы сделать это, как показано ниже.
<li
class="m-menu__item"
:class="checkIsPathAndRoutePathSame('/dashboard') ? 'm-menu__item--active' : ''"
id="dashboard"
@click="toggleMenu('dashboard')"
>
<router-link to="/dashboard" class="m-menu__link">
</router-link>
</li>
data() {
return {
currentRoute: ''
};
},
watch:{
$route (to, from){
this.currentRoute = to.path;
}
},
mounted() {
this.currentRoute = this.$route.path;},
methods: {
checkIsPathAndRoutePathSame(path){
if(this.currentRoute === path){
return true;
}
}
}
Если вы хотите добавить класс к своей активной ссылке маршрута, просто используйте свойство active-class
или exact-active-class
https://router.vuejs.org/api/#active-class:
<router-link
to="/dashboard"
class="m-menu__link"
active-class="yourClass"
>
</router-link>
Обратите внимание, что вы можете визуализировать компонент <route-link>
как элемент <li>
, поэтому просто добавьте классы li в компонент router-link
Изменить
<li
class="m-menu__item m-menu__item--active"
aria-haspopup="true"
id="dashboard"
@click="toggleMenu('dashboard')"
:class="{ 'my-active-class': isDashboardActive }"
>
<router-link to="/dashboard" class="m-menu__link">
<i class="m-menu__link-icon flaticon-line-graph"></i>
<span class="m-menu__link-title">
<span class="m-menu__link-wrap">
<span class="m-menu__link-text">{{ $t("Dashboard") }}</span>
</span>
</span>
</router-link>
</li>
И в вашем компоненте JS у вас есть 2 варианта:
data: () => ({
isDashboardActive: false
}),
watch:{
$route (to, from){
console.log(to.path);
this.isDashboardActive = true
}
},
Или это
computed: {
// if you use computed, you can remove data and watch
isDashboardActive () {
return this.$route.path === '/dashboard'
}
},
Другой вариант сохранить ту же структуру html, полагаясь на активный класс:
<router-link
class="m-menu__item m-menu__item--active"
aria-haspopup="true"
id="dashboard"
@click="toggleMenu('dashboard')"
to="/dashboard"
active-class="yourClass"
>
<a class="m-menu__link">
<i class="m-menu__link-icon flaticon-line-graph"></i>
<span class="m-menu__link-title">
<span class="m-menu__link-wrap">
<span class="m-menu__link-text">{{ $t("Dashboard") }}</span>
</span>
</span>
</a>
</li>
Похожие вопросы
Новые вопросы
javascript
По вопросам программирования на ECMAScript (JavaScript/JS) и его различных диалектах/реализациях (кроме ActionScript). Обратите внимание, что JavaScript — это НЕ Java. Включите все теги, относящиеся к вашему вопросу: например, [node.js], [jQuery], [JSON], [ReactJS], [angular], [ember.js], [vue.js], [typescript], [стройный] и т. д.