Aye*_*azo 4 javascript vue.js vuetify.js
我正在使用 构建一个永久抽屉内的导航,v-list并且按照指南完成了它。
当抽屉折叠时,它只显示图标,悬停时它会展开,显示导航项的名称。
有几个项目是组,如果我单击它们,我可以看到子项目。
当我希望在抽屉折叠时强制折叠活动子项目时,就会出现问题。
这是代码:
<v-navigation-drawer
v-model="mainSidebarDrawer"
:mini-variant.sync="mini"
fixed
expand-on-hover
permanent
>
<v-list>
<template v-for="(n, i) in nav">
<v-list-item v-if="n.to" :key="`${i}-a`" :to="n.to" link>
<v-list-item-icon>
<v-icon small>{{ n.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>{{ n.label }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-group
v-if="n.subItems"
:key="`${i}-b`"
:prepend-icon="`${n.icon} fa-em`"
:value="subItemsValue" // this looks always false
append-icon="fas fa-chevron-down fa-sm"
>
<template v-slot:activator>
<v-list-item-content>
<v-list-item-title>{{ n.label }}</v-list-item-title>
</v-list-item-content>
</template>
<v-list-item
v-for="(s, y) in n.subItems"
:key="y"
:to="s.to"
link
class="pl-8"
>
<v-list-item-icon>
<v-icon small>{{ s.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>{{ s.label }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-group>
</template>
</v-list>
</v-navigation-drawer>
Run Code Online (Sandbox Code Playgroud)
Vue 代码有:
data() {
return {
mainSidebarDrawer: true,
mini: true,
subItemsValue: false
}
}
Run Code Online (Sandbox Code Playgroud)
所以,回顾一下:
到目前为止,我尝试的是在mini酒店聆听并执行以下操作:
<v-navigation-drawer
...
@update:mini-variant="collapseSubItems"
</v-navigation-drawer>
methods: {
collapseSubItems() {
if (this.mini) {
this.subItemsValue = false
}
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是subItemsValue永远不会改变。我也尝试将其移动到v-model.
怎样才能达到我的结果呢?谢谢
我认为不要使用像这样的单个变量subItemsValue,而是在每个项目上使用“活动”状态变量nav。然后使用该transitionend事件将打开的导航项设置为返回active: false...
<v-navigation-drawer
v-model="mainSidebarDrawer"
permanent
expand-on-hover
@transitionend="collapseSubItems"
>
<v-list>
<template v-for="(n, i) in nav">
<v-list-item v-if="n.to" :key="`${i}-a`" :to="n.to" link>
<v-list-item-icon>
<v-icon small>{{ n.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>{{ n.label }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
<v-list-group
v-if="n.subItems"
:key="`${i}-b`"
:prepend-icon="`${n.icon} fa-em`"
v-model="n.active"
append-icon="fas fa-chevron-down fa-sm"
>
<template v-slot:activator>
<v-list-item-content>
<v-list-item-title>{{ n.label }}</v-list-item-title>
</v-list-item-content>
</template>
<v-list-item
v-for="(s, y) in n.subItems"
:key="y"
:to="s.to"
link
class="pl-8"
>
<v-list-item-icon>
<v-icon small>{{ s.icon }}</v-icon>
</v-list-item-icon>
<v-list-item-content>
<v-list-item-title>{{ s.label }}</v-list-item-title>
</v-list-item-content>
</v-list-item>
</v-list-group>
</template>
</v-list>
</v-navigation-drawer>
collapseSubItems() {
this.nav.map((item)=>item.active=false)
},
Run Code Online (Sandbox Code Playgroud)
演示: https: //codeply.com/p/qzrKTPSzrB