【发布时间】:2018-09-26 14:36:08
【问题描述】:
我已经关注了这篇博文:Dynamic Vue.js Layout Components,使用动态组件构建了一些布局。
我现在在布局中放置了一个侧导航栏来更新路由器视图。 虽然导航有效,但我无法显示活动链接的修改样式。 如果我将它导入到布局之外的主页中,该组件将按预期工作。我想那是因为每次路线更改都会重新安装它。 但在布局中,没有任何变化。我认为这是因为当路线改变时布局不会重新渲染。我试过 vm.$forceUpdate 没有成功,所以我正在寻找正确的方法来让组件在被点击后重新安装(如果这确实是问题的根源)
更新:我已设法在代码和框中显示此内容以使其更易于理解:codesandbox.io/s/mqwl3jlvx8
我的代码如下所示: 应用程序.vue:
<template>
<div id="app">
<v-app>
<component :is="layout">
<router-view :layout.sync="layout"/>
</component>>
</v-app>
</div>
</template>
<script>
export default {
name: 'App',
data() {
return {
layout: 'div',
};
},
}
</script>
布局文件:
<template>
<div class="LayoutDefault">
<div class="box">
<div class="wrapper">
<SideNav class="sidenav" />
<slot class="main"/>
</div>
</div>
</div>
</template>
<script>
import SideNav from '@/components/crmSideNav.vue'
export default {
name: "LayoutDefault",
components: { SideNav, }
};
</script>
SideNav 组件然后有一个 v-for 用于几个 NavItem 组件,数据作为 props 传递。 在 NavItem 组件中,我有以下方法:
goTo(){
this.myIconColor = this.iconColor
this.myTextColor = this.textColor
this.$router.push({ path: this.path })
}
},
mounted(){
if(this.$route.path === this.path) {
this.myIconColor = this.highlightColor
this.myTextColor = this.highlightColor
this.myBackgroundColor = 'rgba(0,0,0,0.1)'
}
}
【问题讨论】:
-
试图将
keep-alive包装在您的动态组件上? vuejs.org/v2/guide/components-dynamic-async.html -
我在动态组件内部没有问题,但在包装它的布局中。我在布局中的 Nav 组件在开始时不会只触发一次安装的功能,而不是在每个被点击的项目上