nuxt+element 侧边菜单栏

项目用的是nuxtjs  需要根据用户类型来显示侧边菜单栏

直接上代码了

navMenu.vue

<template>
  <div class="navMenu">
    <div v-for="(item,index) in navList" v-if="item.userType.indexOf(userType) > -1" :key="index" class="navMenu-item">
      <nuxt-link v-if="item.children === undefined" :to="item.path">
        <el-menu-item :index="item.path">
          <svg-icon v-if="item.icon" :icon-class="item.icon" />
          <span slot="title">{{ item.name }}</span>
        </el-menu-item>
      </nuxt-link>
      <el-submenu v-else-if="item.children !== undefined && item.children.length > 0" :index="item.path">
        <template slot="title">
          <nuxt-link slot="title" :to="item.path">
            <svg-icon v-if="item.icon" :icon-class="item.icon" />
            {{ item.name }}
          </nuxt-link>
        </template>
        <el-menu-item-group class="itemGroup">
          <navMenu :nav-list="item.children" :user-type="userType"></navMenu>
        </el-menu-item-group>
        
      </el-submenu>
    </div>
  </div>
</template>

<script>
export default {
  name: "NavMenu",
  props: {
    userType: {
      type: String,
      default: function() {
        return ""
      }
    },
    navList: {
      type: Array,
      default: function() {
        return []
      }
    }
  },
  data() {
    return {}
  },
  created() {},
  methods: {}
}
</script>


sideBar.vue

    <el-menu
        :default-active="$route.path"
        :unique-opened="true"
        :router="true"
        :collapse="isCollapse"
        :collapse-transition="true"
        class="el-menu-sideBar"
        text-color="#fff"
        active-text-color="#fff"
      >
        <navMenu
          :nav-list="navList"
          :user-type="$store.state.userInfo.userType"
        ></navMenu>
        <--登录成功后讲后台返回的用户信息存进store 这里将获取到的userInfo.userType取出来进心过来 -->
      </el-menu>

navList格式应该是这样的

[
  {
    name: "用户管理",
    path: "/users",
    icon: "user",
    userType: ["0", "1"]
  },
  {
    name: "Topic管理",
    path: "/user/topic",
    icon: "topic",
    userType: ["1"]
  },
  {
    name: "生产者管理",
    path: "/user/producer",
    icon: "producer",
    userType: ["1"]
  },
  {
    name: "消费者管理",
    path: "/user/consumer",
    icon: "consume",
    userType: ["1"]
  },
  {
    name: "Group ID管理",
    path: "/user/groupId",
    icon: "group",
    userType: ["1"]
  },
  {
    name: "消息轨迹",
    path: "/user/message-track",
    icon: "track",
    userType: ["1"]
  },
  {
    name: "组件监控",
    path: "/admin/monitor/health",
    icon: "monitor",
    userType: ["0"]
    
  }
]

 

  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
是的,nuxt + vue-i18n 在多语言切换时会改变路由,这是它的核心机制所决定的。nuxt + vue-i18n 通过在路由路径中添加语言前缀来实现多语言切换的,例如: ``` // 中文版路由 /zh/home // 英文版路由 /en/home ``` 这样做的好处是可以让搜索引擎更好地识别不同语言的页面,从而提高网站的 SEO。 如果您不想在路由中添加语言前缀,也可以通过配置 nuxt.config.js 文件来实现。具体实现方法如下: 1. 设置 routeNameSplitter 在 nuxt.config.js 文件中,设置 routeNameSplitter 选项,例如: ``` export default { ... router: { ... routeNameSplitter: '/' }, ... } ``` 这样做的效果是让 nuxt 不在路由中添加语言前缀,而是使用 / 分隔符来分隔路由和语言信息。 2. 使用别名来设置带有语言信息的页面路径 在 pages 文件夹中,为每个页面创建一个带有语言信息的别名,例如: ``` // pages/home.vue <template> <div> <h1>{{ $t('home.title') }}</h1> </div> </template> <script> export default { ... } // 为中文版路由创建别名 export const cn = { path: '/home', alias: '/zh/home' } // 为英文版路由创建别名 export const en = { path: '/home', alias: '/en/home' } </script> ``` 这样做的效果是让 nuxt 在生成路由时,使用带有语言信息的别名来代替默认的路由路径。 以上是我为您提供的关于 nuxt + vue-i18n 改变了路由的解决方法。如果您有其他问题,可以随时向我提问。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值