【vue】sideMenu 不显示 meta失效解决方法

下面展示一些 内联代码片

//报错信息:显示  cannot read  properties ().children  说明this.mainMenu 此时undefined

解决方法:在basicLayout.vue里注释掉校验语句,改成this.menus = this.mainMenu

// An highlighted block
 created () {
    // this.menus = this.mainMenu.find(item => item.name === 'admin').children //对路由进行校验
    this.menus = this.mainMenu
    this.collapsed = !this.sidebarOpened
  },

在permission.js文件里 手动添加路径

// An highlighted block
const permission = {
  state: {
    routers: constantRouterMap,
    addRouters: [
    //以下内容为 router.config.js 文件里 拷贝过来
      {
        path: '/',
        name: 'index',
        // component: PageView,
        redirect: '/file',
        meta: { title: '主页' },
        children: [
          {
            path: '/file',
            name: 'file',
            component: () => import('@/views/file/File'),
            meta: { title: '事项页123', keepAlive: true, permission: [] }
          },
          {
            path: '/search',
            name: 'search',
            component: () => import('@/views/search/searchTable'),
            meta: { title: 'search', keepAlive: true }
          }
        ]
      }
    ],

之所以这么做是因为,在main.js文件里 permission权限关掉了

下面展示内联代码片

// permission语句被注释
// An highlighted block
import bootstrap from './core/bootstrap'
import './core/lazy_use'
// import './permission' // permission control
import './utils/filter' // global filter
import './utils/base64'

请教同事

下面展示一些 内联代码片

1.找绑定的数据变量 menu

// basicLayout .vue文件
// html5 定位到 代码行 :menus="menus"
 <SideMenu
      v-else-if="isSideMenu()"
      mode="inline"
      :menus="menus" //数据绑定
      :theme="navTheme"
      :collapsed="collapsed"
      :collapsible="true"
      :tenant="tenant"
      :appName="appName"
      :to="to"
    >
 </SideMenu>
 
//JavaScript
 data () {
    return {
      production: config.production,
      collapsed: false,
      menus: []
    }
  },

 created () {
    this.menus = this.mainMenu.find(item => item.name === 'admin').children
    this.collapsed = !this.sidebarOpened
  },

由以上代码可知 接下来找传递给menu的数据mainMenu

下面展示一些 内联代码片

// computed() 方法
// An highlighted block
computed: {
    ...mapState({
      // 动态主路由
      mainMenu: state => state.permission.addRouters
    }),

找vuex ,store里的addRouters

下面展示vuex 内联代码片

// getters.js文件
// An highlighted block
 addRouters: state => {
    return state.permission.addRouters
  },
//module文件夹下的permission.js文件
// state
addRouters:[]
//mutations
 mutations: {
    SET_ROUTERS: (state, routers) => {
      state.addRouters = routers
      state.addRouterMap = generateRouterMap(routers)
      state.routers = constantRouterMap.concat(routers)
    }

//actions里找SET_ROUTERS方法
actions: {
    GenerateAsyncRoutes ({ commit }, data) {
      return new Promise(resolve => {
        const { roles, isSuperTenant } = data
        const roleList = _.map(roles, value => value)
        if (isSuperTenant) {
          roleList.push('superTenant')
        }
        const accessedRouters = filterAsyncRouter(asyncRouterMap, roleList)
        commit('SET_ROUTERS', accessedRouters)
        resolve()
      })
    },
    GenerateRoutes ({ commit }, data) {//
      return new Promise(resolve => {
        const accessedRouters = filterRouter(constantRouterMap)
        commit('SET_ROUTERS', accessedRouters)
        resolve()
      })

全局搜索

下面展示一些 内联代码片

// src 文件夹下的permission.js文件
// 找GenerateRoutes
const checkAuth = async (to, from, next) => {
  NProgress.start() // start progress bar
  // to.meta && (typeof to.meta.title !== 'undefined' && setDocumentTitle(`${to.meta.title} - ${domTitle}`))
  const token = getToken()
  await store.dispatch('GenerateRoutes')

 //找addRouters
      router.addRoutes(store.getters.addRouters)// 动态添加可访问路由表

观察main.js里 发现permission代码被注释

// An highlighted block
import bootstrap from './core/bootstrap'
import './core/lazy_use'
// import './permission' // permission control
import './utils/filter' // global filter
import './utils/base64'

打断点

下面展示一些 内联代码片

//在getter.js文件打断点
// An highlighted block
  addRouters: state => state.permission.addRouters,
  //改成如下形式
    addRouters: state => {return state.permission.addRouters},

显示界面并没有断点出现,说明并没有走到这一步

//在basicLayout.vue文件里打断点,即在报错的语句前
// An highlighted block
created () {
debugger
    // this.menus = this.mainMenu.find(item => item.name === 'admin').children
  
    this.collapsed = !this.sidebarOpened
  },

在这里插入图片描述

关注这2个地方
在这里插入图片描述

在这里插入图片描述

说明 mainMenu为空,该条校验语句导致新增路由没有成功
修改校验语句

// An highlighted block
 created () {
    // this.menus = this.mainMenu.find(item => item.name === 'admin').children //对路由进行校验
    this.menus = this.mainMenu
    this.collapsed = !this.sidebarOpened
  },

中间还看了一些 代码

//由于在basicLayout.vue文件里 sideMenu 引入的语句是import SideMenu from '@/components/Menu/SideMenu'   去文件夹Menu里 找menu.js
// An highlighted block
var foo = 'bar';
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值