vue-antd-admin——实现全网站选项的切换并实现页面的刷新——技能提升
今天写后台管理系统时,遇到一个需求,是关于内外贸选项的切换。
效果图如下:
默认是内贸选项,当进行切换时,无论是在哪个页面,当前页面都要进行刷新,并将选项的参数传递到接口中。
下面详细介绍操作步骤:
1.AdminHeader.vue
组件添加内外贸选项的切换
1.1 template
中的相关代码如下:
<a-dropdown class="lang header-item">
<div>
<a-icon type="pic-left" /> {{ type == 1 ? '内贸' : '外贸' }}
</div>
<a-menu
@click="(val) => setType(val.key)"
:selected-keys="[type]"
slot="overlay"
>
<a-menu-item v-for="type in dataTypeList" :key="type.value">{{
type.label
}}</a-menu-item>
</a-menu>
</a-dropdown>
1.2 data
中添加dataTypeList
参数
data(){
return{
dataTypeList: [
{ value: '1', label: '内贸' },
{ value: '2', label: '外贸' },
],
}
}
1.3 从vuex中引入mapState
和mapMutations
import { mapState, mapMutations } from 'vuex';
1.4 在computed中获取mapState中的type,从mapMutations中获取setType方法
computed: {
...mapState('setting', [
'type',
]),
},
methods: {
...mapMutations('setting', ['setType']),
}
2.store/modules/setting.js
文件中添加type参数和setType方法
state:{
type: '1',
},
mutations: {
setType(state, type) {
state.type = type;
},
}
3.App.vue
文件中添加以下的刷新代码
3.1 template
中的代码如下:
<template>
<a-config-provider :locale="locale" :get-popup-container="popContainer">
<router-view v-if="isRouterAlive" />
</a-config-provider>
</template>
3.2 data
中的参数
data() {
return {
isRouterAlive: true,
};
},
3.3 从vuex中引入mapState
和mapMutations
import { mapState, mapMutations } from 'vuex';
3.4 在computed中获取mapState中的type,从mapMutations中获取setType方法
computed: {
...mapState('setting', [
'type',
]),
},
methods: {
...mapMutations('setting', ['setType']),
}
3.5 watch
中监听type
watch: {
type(newVal) {
console.log('type改变了', newVal);
this.reload();
},
}
3.6 methods
中添加刷新当前页面的方法
reload() {
this.isRouterAlive = false;
console.log('刷新当前页面了');
this.$nextTick(() => {
this.isRouterAlive = true;
});
},
4.监听路由参数的变化,从而更改type的值
watch: {
$route() {
console.log('route', this.$route.query);
if(this.$route.query&&this.$route.query.dataType){
this.setType(this.$route.query.dataType)//将路由中的参数设置到vuex中,调用接口的时候可以从vuex中获取
}
//this.setHtmlTitle(); 这个是设置标题啥的,此处无用
},
}
5.接口js文件中添加入参
import store from '../../store';//相对路径根据具体的来
console.log(store.state.setting.type);此时就可以拿到vuex中的参数了,然后调用接口的时候统一添加此参数即可。
完成!!!多多积累,多多收获!