Untergeordnete Elemente nur anzeigen, wenn in vuejs auf das übergeordnete Element geklickt wird
P粉574695215
P粉574695215 2024-02-25 19:20:16
0
1
428

Ich versuche eine Navigationsseitenleiste zu erstellen. Es wird Hauptprojekte und Unterprojekte geben.

Ich versuche, die untergeordneten Elemente nur anzuzeigen, wenn auf das übergeordnete Element geklickt wird, und ich möchte, dass das aktive untergeordnete Element eine andere Farbe hat, wenn ich auf das untergeordnete Element klicke. Wie erreiche ich das?

Hier ist, was ich bisher versucht habe.

<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>

P粉574695215
P粉574695215

Antworte allen(1)
P粉132730839

尝试像下面的代码片段(您在嵌套链接中错过了另一个 ul,然后只需使用列表索引切换显示/隐藏导航):

new Vue({
  el: "#demo",
  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',},
      ],
      show: null,
      active: null
    }
  },
  methods: {
    toggleNav(i) {
      this.active = null
      this.show === i ? this.show = null : this.show = i
    },
    setActive(i) {
      this.active === i ? this.active = null : this.active = i
    }
  }
})
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;
}

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage