点击不同导航栏下的二级菜单,页面不变,弹出不同弹框,可以使用懒加载+动态组件挂载实现。
懒加载是为了按需引入,不用一次性将所有弹框引入,这样做可以提高性能;动态组件挂载是为了方便弹框切换。
具体实现如下:
HTML部分
<ul @click="showDown = false"> <!-- 一级菜单 --> <li v-for="(item, index) in name" :key="index" @click="addClass(index)" :class="{ bgColor: index == current }" > <a href="javascript:;" ref="ch">{{ item.title }}</a> <!-- 二级菜单 --> <div class="down" ref="btn" v-show="current === index ? true : false" @click.stop="showDown = !showDown" > <p v-for="(itemq, i) in item.down" style="cursor:pointer" :key="i" :class="{ downColor: i == now }" @click="big(i, index)" > {{ itemq.title }} </p> </div> </li> </ul>
<!-- 弹框 --> <component message="我是子" ref="box" v-bind:is="whichcomp"></component>
JavaScript引入部分,应在data里
name: [ { title: '一级菜单1', down: [ { title: '二级菜单1', component: () => import('./1.vue') }, { title: '二级菜单2', component: () => import('./2.vue') }, { title: '二级菜单3', component: () => import('./3.vue') }, { title: '二级菜单4', component: () => import('./4.vue') } ] }]
JavaScript功能部分
big (i, index) { this.now = i this.whichcomp = this.name[index].down[i].component if (typeof (this.$refs.box) !== 'undefined') { this.$refs.box.show = true } }