javascript - Vue 3 : Tree Menu Show

标签 javascript vue.js vuejs3

明确我想做什么... 单击 Menu 1 时,将显示其 ul,同样,如果显示 Menu 1 ul,并且 Menu 1 被点击,ul 未显示。 同样适用于菜单 2

你能举例说明我怎样才能做我想做的事吗?

菜单 1 单击菜单 1 ul 显示ul 显示关闭

<ul>
    <li v-for="(item,index) in menuData" :key="index">
      <router-link :to="item.path" exact @click.stop="showMenu(index)">{{ item.name }}</router-link>
      <ul v-if="item.children" v-show="showCollapsed">
        <li v-for="(childItem,ChildIndex) in item.children" :key="ChildIndex">
          <router-link :to="childItem.path">{{ childItem.name }}</router-link>
        </li>
      </ul>
    </li>
  </ul>
<script>
export default {
  name: "App",
  data() {
    return {
      openshow: false,
      selected: null,
      menuData: [{name: "Home", path: "/",}, {name: "About", path: "/about",}, {name: "Menu 1", path: "#", children: [{name: "Menu 1.1", path: "/menu/1/1",}, {name: "Menu 1.2", path: "/menu/1/2",}, {name: "Menu 1.3", path: "/menu/1/3",},],}, {name: "Menu 2", path: "#", children: [{name: "Menu 2.1", path: "/menu/2/1",}, {name: "Menu 2.2", path: "/menu/2/2",}, {name: "Menu 2.3", path: "/menu/2/3",},],}, {name: "Gallery", path: "/gallery",}, {name: "Contact", path: "/contact",},],
    }
  },
  methods: {
    showMenu(index) {
      this.selected = index;
    },
    showCollapsed() {

    }
  }
}
</script>

最佳答案

只需使用带有传递索引的 showMenu 方法,然后检查 ul 来显示传递给 showCollapsed 的索引:

const app = Vue.createApp({
   data() {
    return {
      openshow: false,
      selected: null,
      menuData: [{name: "Home", path: "/",}, {name: "About", path: "/about",}, {name: "Menu 1", path: "#", children: [{name: "Menu 1.1", path: "/menu/1/1",}, {name: "Menu 1.2", path: "/menu/1/2",}, {name: "Menu 1.3", path: "/menu/1/3",},],}, {name: "Menu 2", path: "#", children: [{name: "Menu 2.1", path: "/menu/2/1",}, {name: "Menu 2.2", path: "/menu/2/2",}, {name: "Menu 2.3", path: "/menu/2/3",},],}, {name: "Gallery", path: "/gallery",}, {name: "Contact", path: "/contact",},],
    }
  },
  methods: {
    showMenu(index) {
      this.selected === index ? this.selected = null : this.selected = index;
    },
    showCollapsed(idx) {
      return idx === this.selected || false
    }
  }
})
app.mount('#demo')
<script src="https://unpkg.com/vue@3/dist/vue.global.prod.js"></script>
<div id="demo">
  <ul>
    <li v-for="(item,index) in menuData" :key="index" @click="showMenu(index)">
      <router-link :to="item.path" exact>{{ item.name }}</router-link>
      <ul v-if="item.children" v-show="showCollapsed(index)">
        <li v-for="(childItem,ChildIndex) in item.children" :key="ChildIndex">
          <router-link :to="childItem.path">{{ childItem.name }}</router-link>
        </li>
      </ul>
    </li>
  </ul>
</div>

关于javascript - Vue 3 : Tree Menu Show,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71981601/

相关文章:

vue.js - Vue CLI v3 - 它如何知道哪些 JS 文件应该分块到不同的文件中

javascript - 如何在存储在数组中的 html vue js 中提供编辑功能?

javascript - 组件中的Vuejs3 react 数组

typescript - 类型错误 : EventEmitter is not a constructor at new MapboxGeocoder

c# - 动态表 : Link button to textbox cell by cell

javascript - 使表格单元格不会因为内容而垂直扩展

javascript - 获取所选内容(包括所选内容)的 HTML

javascript - 如何在 Vue 3/Nuxt 3 中为表单提交添加动态输入字段?

javascript - 如果eval()无法评估给定的字符串,则显示 “Syntax Error”

javascript - 处理重叠元素的点击