suchen

Heim  >  Fragen und Antworten  >  Hauptteil

Untergeordnete Elemente nur anzeigen, wenn in vuejs auf das übergeordnete Element geklickt wird

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粉574695215P粉574695215278 Tage vor406

Antworte allen(1)Ich werde antworten

  • P粉132730839

    P粉1327308392024-02-26 17:50:45

    尝试像下面的代码片段(您在嵌套链接中错过了另一个 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;
    }
    
    

    Antwort
    0
  • StornierenAntwort