내비게이션 사이드바를 만들려고 합니다. 메인 프로젝트와 서브 프로젝트가 있습니다.
상위 항목을 클릭했을 때만 하위 항목을 표시하려고 하고, 하위 항목을 클릭하면 활성 하위 항목이 다른 색상으로 표시되도록 하고 싶습니다. 이를 어떻게 달성합니까?
지금까지 시도한 내용은 다음과 같습니다.
<template> <div> <nav> <ul> <li v-for="(link, index) in navLinks" :key="index"> <router-link :to="link.path" class-active="active"> <span class="items"> {{ link.text }} </span> </router-link> <div v-if="link.sublinks && link.sublinks.length > 0"> //I want it to show only when the parent item is clicked <li v-for="(link, index) in belowLinks" :key="index"> <router-link :to="link.path" class-active="sub-active"> //trying to add the sub-active class but it's not working <span class="sub-items"> {{ link.text }} </span> </router-link> </li> </div> </li> </ul> </nav> </div> </template> <script> export default { data() { return { navLinks: [ { text: 'Contact', path: '/contact', sublinks: [ { text: 'Email', path: '/email', }, ], }, { text: 'About', path: '/about', }, ], belowLinks: [ { text: 'Blog', path: '/blog', }, { text: 'Portfolio', path: '/portfolio', }, ], }; }, }; </script> <style scoped > nav { height: 100vh; display: flex; flex-direction: column; background: #040521; justify-content: space-between; } ul { display: flex; align-items: center; margin-block-start: 0; margin-block-end: 0; padding-inline-start: 0; flex-direction: column; } a { text-decoration: none; display: flex; align-items: center; color: white; } a:hover { color: white; } li { list-style-type: none; padding: 10px 0px; width: 100%; } .page-link .active, .router-link-active { background-color: green; color: white !important; border-color: inherit !important; } .sub-active { background-color: yellow !important; color: white !important; border-color: inherit !important; } .items { padding: 10px 20px; } .sub-items { padding: 10px 0px 10px 40px; } </style>
아래 스니펫과 같은 것을 시도해 보세요(중첩된 링크에서 다른
ul
를 놓친 다음 목록 색인을 사용하여 탐색 표시/숨기기를 전환하세요).