前言,目前一个小项目使用的是Ant Design Vue,情况是 路由从接口获取并渲染到页面上,切换国际化语言时,Menu 和 内容 都中英文自动切换。
Ant Design Vue 结构
Ant Design Vue接口获取路由并渲染
切换国际化 内容 和 Menu的操作
内容改变:
<template>
<a-input v-model="name" :placeholder="$t('model.name')" allow-clear />
</template>
<script>
import i18n from '../../../../config/i18n'
export default {
data() {
return {}
},
created() {},
computed: {
columns() {
return [
{
title: i18n.t('number'),
dataIndex: 'number',
scopedSlots: {
customRender: 'number'
}
}
]
}
}
}
</script>
Menu的操作
?项目Menu是根据接口获取后渲染且渲染界面 BasicLayout.vue 版块中
我想到的解决办法是
- 登录时路由接口返回的数据保存到缓存?localStorage 中
- 切换国际化语言时,重新请求路由接口并且赋 修改语言的路由
- 在BasicLayout.vue 监听路由缓存的变化,对路由重新赋值,达到切换menu数据的目的
?监听缓存
- ?localStorage.js?
export default function tools () {
const signSetItem = localStorage.setItem;
localStorage.setItem = function (key, val) {
const setEvent = new Event('setItemEvent');
setEvent.key = key;
setEvent.value = val;
window.dispatchEvent(setEvent);
signSetItem.apply(this, arguments);
};
} - ?vue 引入 - main.js
import storage from './utils/localstorage'
Vue.use(storage) - ? ?在BasicLayout.vue放入监听
var that = this;
window.addEventListener('setItemEvent', function (e) {//监听
if(e.key == 'routers'){//缓存的key
//改变menu的值
that.menus = e.value.find(item => item.path === '/').children
that.collapsed = !that.sidebarOpened;
}
}) ? ? ?
|