VueJ가 경로 변경 시 햄버거 메뉴를 닫다
Bootstrap의 네비게이션 바가 있는 간단한 VueJS 앱을 가지고 있습니다.
<template>
<header id="header">
<nav class="navbar mynavbar navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="logo" href="index.html"><img src="images/logo.png" alt=""></a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li><router-link to="/home"><a>Home</a></router-link></li>
<li><router-link to="/about"><a>About Us</a></router-link></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
</header>
</template>
루트를 변경하면 부트스트랩 메뉴가 닫힙니다.이를 실현하는 가장 좋은 방법은 무엇입니까?
이벤트 핸들러를 다음에 추가하는 대신router-link
, 간단히 볼 수 있습니다.$route
변경 속성:
<script>
export default {
watch: {
'$route' () {
$('#navbar-collapse').collapse('hide');
}
}
}
</script>
부트스트랩과 jQuery를 사용하지 않으면 클래스 토글 및 워치루트 변경을 사용하여 쉽게 달성할 수 있습니다.
<a role="button" class="navbar-burger" aria-label="menu" aria-expanded="false"
@click="toggledNav = !toggledNav"
>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
<span aria-hidden="true"></span>
</a>
스크립트:
export default {
data () {
return {
toggledNav: false
}
},
watch: {
'$route' () {
this.toggledNav = false
}
}
}
한 번 시도해 보세요.
<template>
<header id="header">
<nav class="navbar mynavbar navbar-fixed-top">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#navbar-collapse">
<span class="sr-only">Toggle navigation</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<a class="logo" href="index.html"><img src="images/logo.png" alt=""></a>
</div>
<div class="collapse navbar-collapse" id="navbar-collapse">
<ul class="nav navbar-nav navbar-right">
<li><router-link @click.native="closeMenu()" to="/home"><a>Home</a></router-link></li>
<li><router-link @click.native="closeMenu()" to="/about"><a>About Us</a></router-link></li>
</ul>
</div><!-- /.navbar-collapse -->
</div><!-- /.container -->
</nav>
</header>
</template>
<script>
export default {
methods: {
closeMenu() {
$('#navbar-collapse').collapse('hide');
}
}
}
</script>
vue3 및 bootstrap5를 사용하여 라우터 링크 요소에 다음 항목을 추가합니다.
data-bs-toggle="collapse" data-bs-target=".navbar-collapse"
링크가 팔로우 되지 않으면 메뉴가 닫힙니다.그래서 router/index.js에 추가했습니다.
router.beforeEach(() => {
document.getElementById('navbarCollapse').classList.remove('show');
})
navbarCollapse는 메뉴/내비게이션 항목을 유지하는 div의 ID입니다.효과가 있는 것 같았어요.
필요한 경우 햄버거 버튼 상태를 조정할 수 있습니다. 클래스 목록에는 "collapsed"가 포함되어 있고 aria-expanded는 "false"로 설정되어 있어야 합니다.사용자가 다시 버튼을 클릭하면 수정이 되기 때문에 저는 그 코드를 작성하지 않았습니다.
bootstrap-vue 및 vue-router를 사용하는 경우.
<script>
export default {
watch: {
'$route' () {
const element = document.querySelector("#nav-collapse");
let isShown = element.classList.contains("show");
if(isShown){
this.$root.$emit('bv::toggle::collapse', 'nav-collapse')
}
}
}
}
</script>
<template>
<b-navbar toggleable="lg" type="" class="p-0">
<b-navbar-toggle target="nav-collapse" id="navbar-collapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</b-navbar-toggle>
<b-collapse id="nav-collapse" is-nav>
<div class="nav-wrapper w-100">
<ul class="app-navigation__list">
<router-link to="/whatever" tag="li" exact class="app-navigation__list__item">
<a href="">
<span class="link-text">Home</span>
</a>
</router-link>
<router-link to="/whatever" tag="li" exact class="app-navigation__list__item">
<a href="">
<span class="link-text">About</span>
</a>
</router-link>
<router-link to="/whatever" tag="li" exact class="app-navigation__list__item">
<a href="">
<span class="link-text">Store</span>
</a>
</router-link>
</ul>
</div>
</b-collapse>
</b-navbar>
</template>
오래된 질문인 것은 알지만 제 답변이 도움이 될 수 있습니다.이것을 라우터/index.js로 실행해 주세요.
const router = createRouter({}); //P.S I am using Vue3
각 루트가 이렇게 들어가기 전에 이 값을 추가합니다.
router.beforeEach(() => {
$('.navbar-collapse').collapse('hide'); //Be sure to import jquery
});
이것은 매우 간단한 작업이기 때문에, 나는 나의 간단한 웹사이트처럼 간단하게 하려고 한다.
Vue.mixin((()=> {
let store = Vue.observable({
indexMenu: false,
})
return{
computed: {
menu: {
get() {
return store.indexMenu
},
set(val) {
store.indexMenu = val
}
}
},
watch: {
'$route' () {
this.menu = false
}
}
}})())
router.beforeEach((from,to,next) => {
$('.navbar-collapse').collapse('hide'); //Be sure to import jquery
next();
});
이것은 동작합니다.
언급URL : https://stackoverflow.com/questions/42855985/vuejs-close-hamburger-menu-on-route-change
'programing' 카테고리의 다른 글
v-html과 v-text의 차이점은 무엇입니까? (0) | 2022.07.24 |
---|---|
vueJs의 inside data()와 inside created()의 오브젝트 선언의 차이점은 무엇입니까? (0) | 2022.07.24 |
Console.log가 Vue js watchcher에서 두 번 호출됨 (0) | 2022.07.24 |
왜 16진수를 사용하는가? (0) | 2022.07.24 |
Java 8 메서드 레퍼런스: 파라미터화된 결과를 제공할 수 있는 공급업체 제공 (0) | 2022.07.24 |