【发布时间】:2020-08-24 08:42:57
【问题描述】:
我跟着 https://medium.com/@rmmmsy/creating-a-sidebar-with-dynamic-content-using-vue-and-vuex-88e904894e00 创建了一个基于 vuex 的侧边栏切换。
嗯 - 我想在我的侧边栏中实现一个“关闭”按钮。实际上我无法在这个侧边栏组件中访问this.component。
所以目前我这样做是一种肮脏的解决方法:
这是我的布局文件:
<template>
<div class="min-h-screen">
<div>
<header>
<Navbar/>
</header>
<main>
<SlideOvers />
<router-view/>
</main>
<footer>
<div id="footer">
<div>
<Footerbar/>
</div>
</div>
</footer>
</div>
</div>
</template>
<script>
import Footerbar from '../components/Navigation/Footerbar/Footerbar';
import Navbar from '../components/Navigation/Navbar/Navbar';
import SlideOvers from "./SlideOvers";
export default {
name: 'Layout-1',
components: {SlideOvers, Footerbar, Navbar},
},
};
</script>
这是SliveOvers-组件:
<template>
<component :is="component" :component="component" v-if="open"/>
</template>
<script>
export default {
name: 'SlideOvers',
components: {},
watch: {
'$route' () {
this.$store.dispatch ('closeSidebar', this.component)
},
},
computed: {
open () {
return this.$store.state.slideovers.sidebarOpen
},
component () {
return this.$store.state.slideovers.sidebarComponent
}
},
}
</script>
这是触发滑动的一个按钮:
<template>
<div>
<button @click="handleClick"
class="btn">
Open user menu
</button>
</div>
</template>
<script>
import UserSlideover from "../../Slideovers/User/UserSlideover";
export default {
name: "UserMenuButton",
data () {
return {
component: UserSlideover,
}
},
computed: {
computedOpen () {
return this.$store.state.slideovers.sidebarOpen && this.$store.state.slideovers.sidebarComponent === this.component
}
},
methods: {
handleClick () {
this.$store.dispatch ('toggleSidebar', this.component)
}
}
};
</script>
在侧边栏中:
props: {
component: {
type: Object
},
},
computed: {
computedOpen () {
console.log (this.component);
return this.$store.state.slideovers.sidebarOpen && this.$store.state.slideovers.sidebarComponent === this.component
}
},
methods: {
handleClick () {
this.$store.dispatch ('toggleSidebar', this.component)
}
}
我认为这不是我想出的最佳解决方案。
这里有人有更好的主意吗?
【问题讨论】:
-
我有点困惑。
:is="component行显示组件是正在渲染的组件?请您发布完整的布局文件,以便您获得更好的帮助。 -
请告诉我
sidebar组件的来源?我在代码中看不到它。它是slideovers组件的一部分吗?为什么需要将组件分派到商店?请给我看看 Vuex 商店好吗? -
侧边栏组件在这种情况下是
UserSlideover组件。 -
除了我的回答之外,您似乎是
this.$store.state.slideovers.sidebarComponent作为组件的道具。为什么不能在整个应用程序中使用this.$store.state.slideovers.sidebarComponent,因为存储状态是全局的?
标签: vue.js vuejs2 vue-component vuex