Vue一级导航用v-for生成的,二级导航是侧边栏,选项内容是组件定义的,怎么用代码表示在点击一级导航后切换二级导航的组件选项,并且二级导航侧边栏点击里面的选项后,选项对应的子组件内容呈现在模板里面
时间: 2024-02-09 10:08:18 浏览: 38
好的,我来回答你的问题。
首先,你需要在一级导航的模板中添加一个点击事件,用来切换二级导航的组件选项。你可以定义一个 `currentOption` 变量来表示当前选中的组件选项,然后在点击事件中更新这个变量。
```
<template>
<div>
<ul>
<li v-for="(option, index) in options" :key="index" @click="currentOption = option">
{{ option.name }}
</li>
</ul>
<SecondNav :currentOption="currentOption" />
</div>
</template>
<script>
import SecondNav from './SecondNav.vue';
export default {
data() {
return {
options: [
{ name: 'Option 1', component: 'Component1' },
{ name: 'Option 2', component: 'Component2' },
{ name: 'Option 3', component: 'Component3' }
],
currentOption: null
}
},
components: {
SecondNav
}
}
</script>
```
然后,在 `SecondNav` 组件中,你可以定义一个 `currentComponent` 变量来表示当前选中的子组件,然后在侧边栏中的选项被点击时,更新这个变量。你可以使用 `v-if` 指令来根据 `currentComponent` 变量是否为某个组件来动态渲染对应的子组件。
```
<template>
<div>
<ul>
<li v-for="(option, index) in options" :key="index" @click="currentComponent = option.component">
{{ option.name }}
</li>
</ul>
<div>
<Component1 v-if="currentComponent === 'Component1'" />
<Component2 v-if="currentComponent === 'Component2'" />
<Component3 v-if="currentComponent === 'Component3'" />
</div>
</div>
</template>
<script>
import Component1 from './Component1.vue';
import Component2 from './Component2.vue';
import Component3 from './Component3.vue';
export default {
props: {
currentOption: Object
},
data() {
return {
options: [
{ name: 'Option 1', component: 'Component1' },
{ name: 'Option 2', component: 'Component2' },
{ name: 'Option 3', component: 'Component3' }
],
currentComponent: null
}
},
components: {
Component1,
Component2,
Component3
},
watch: {
currentOption(newValue) {
this.currentComponent = newValue.component;
}
}
}
</script>
```
通过这种方式,你就可以在点击一级导航后切换二级导航的组件选项,并且在二级导航侧边栏中点击选项后,对应的子组件内容会呈现在模板中了。
阅读全文