【发布时间】:2019-04-12 03:00:36
【问题描述】:
我正在尝试通过单击汉堡菜单打开 Vuetify 导航抽屉。到目前为止,我有一个带有两个子组件的应用程序组件,<navbar/> 和 <drawer/>。
<template>
<v-app>
<navbar/>
<drawer v-show='showSideBar'/>
<router-view></router-view>
</v-app>
</template>
<script>
import { mapState, mapActions, mapGetters } from 'vuex';
import Navbar from '@/_components/Navbar/Navbar';
import Drawer from '@/_components/Drawer/Drawer';
export default {
name: "app",
computed: {
...mapGetters('navbar', {
showSideBar: 'g_sideBarOpen',
})
},
components: {
Navbar,
Drawer,
}
};
</script>
Navbar.vue:
<template>
...
<v-toolbar-side-icon
:ripple='false'
@click.stop='toggleSideBar'
></v-toolbar-side-icon>
</template>
<script>
import { mapState, mapActions } from 'vuex';
export default {
data: () => ({
items: [
{
title: 'Profile',
url : '/profile',
},
{
title: 'Logout',
url : '/login',
},
],
}),
components: {
Logo,
},
computed: {
...mapState({
account: state => state.account,
}),
},
methods: {
...mapActions('navbar', [
'toggleSideBar',
]),
}
}
</script>
抽屉.vue:
<template>
<v-navigation-drawer absolute temporary>
<v-list class="pa-1">
<v-list-tile avatar>
<v-list-tile-avatar>
<img src="https://randomuser.me/api/portraits/men/85.jpg">
</v-list-tile-avatar>
<v-list-tile-content>
<v-list-tile-title>John Leider</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
<v-list class="pt-0" dense>
<v-divider></v-divider>
<v-list-tile v-for="item in items" :key="item.title">
<v-list-tile-action>
<v-icon>{{ item.icon }}</v-icon>
</v-list-tile-action>
<v-list-tile-content>
<v-list-tile-title>{{ item.title }}</v-list-tile-title>
</v-list-tile-content>
</v-list-tile>
</v-list>
</v-navigation-drawer>
</template>
<script>
export default {
data: () => ({
items: [
{
title: "Profile",
url: "/profile"
},
{
title: "Logout",
url: "/login"
}
]
})
};
</script>
我的navbar.module.js如下:
const state = {
sideBarOpen: false,
};
const getters = {
g_sideBarOpen(state) {
return state.sideBarOpen
}
};
const actions = {
toggleSideBar({ commit }) {
commit('toggleSideBar');
},
};
const mutations = {
toggleSideBar(state) {
state.sideBarOpen = !state.sideBarOpen;
}
};
export const navbar = {
namespaced: true,
state,
actions,
getters,
mutations,
};
查看 Vue/Vuex 开发工具,我可以看出 Vuex 部分工作正常并且状态正确更新以反映 sideBarOpen 是假还是真。
当我单击汉堡包并验证 sideBarOpen 是否为真并检查 DOM 时,在我看来 transform: translateX(-300px) 样式根本没有改变,事实上,当我删除该属性时,我可以看到抽屉正确移动到视野中。
我一生都无法弄清楚问题是什么,但我觉得这很简单。有没有人遇到过类似的问题?
*已编辑以包含 Navbar.vue
【问题讨论】:
-
我对 vuetify.js 不太熟悉,但是我看不出
v-show是如何影响抽屉组件的transformcss 属性的。v-show只是更改是否显示组件(使用 cssdisplay属性)并且是可用于所有组件的指令。你确定你为drawer使用了正确的道具吗? -
好点,我想我在某处的教程上看到了。 Vuetify 示例使用
v-model=""显示它,并且他们的导航抽屉 api 显示道具“值”作为控制可见性的内容。不过,我确实尝试过这两种路线,但无论出于何种原因,似乎都没有出现在我面前。 -
嗯...你的
Drawer组件是什么样的? Vuetify 似乎只有v-navigation-drawer -
我已经用 Drawer.vue 更新了我的帖子
标签: vue.js vuex vuetify.js