首页 > 其他分享 >切换项目后,默认选中第一个菜单项

切换项目后,默认选中第一个菜单项

时间:2023-07-07 17:12:44浏览次数:34  
标签:projectId 默认 监听 选中 菜单项 Vuex 下拉框 路由 加载

问题

这两篇文章:

  1. 若依菜单改造(二):面包屑及顶部下拉框
  2. 若依菜单改造(三):根据不同项目,加载动态菜单

会产生bug:

  1. 切换顶部项目下拉框时,projectId 改变了,但是 appId 没有改变,这会导致接口报错。

    image

  2. 页面加载来源应该有两个,而不是单个:projectIdappId 任意一个改变时,且都有值时,应该加载页面。

    image

解决方案

针对 bug1:顶部项目下拉框切换时,默认选中左侧第一个动态菜单项。

注意:此处的数据加载顺序:

  1. 切换顶部项目下拉框、跳转路由(改变 projectId
  2. 触发 App.vueprojectId全局监听器
  3. 请求项目菜单路由(Vuex 中根据 projectId请求接口获得 appList,并生成对应的动态路由并渲染动态菜单)
    因此,应该在第3步之后,更改路由地址中的 appIdappList 中第一条数据的 appId
    因此,需要用到Vuex

Vuex 代码:判断是否切换了顶部项目下拉框

image

image

image

image

渲染动态路由后,跳转到正确的路由

image

image

针对 bug2:深度监听由 projectIdappId 组成的对象。

注意:此处在组件内监听该对象,切换或刷新会多次触发监听事件,与预期不符。应该在 App.vue 中监听。【原因尚不明确】

因此,可利用 Vuex 实现。

Vuex 代码

image

image

image

App.vue 中监听对象

image

组件中加载页面

image

总结

  1. 判断数据的加载顺序和时机;
  2. 监听多个数据,用对象;
  3. 在 Vuex 中跳转路由:先引入 router,再使用 router.push()
  4. router.app._route 可在 Vuex 中获取当前路由;
  5. Vuex 中不同模块之间互相使用数据,可在 actions 中函数第一个参数中传入 rootState
  6. 注意:使用 commit('actionsName', payload, {root: true}) 可调用另一个模块的 actions 函数,其中第一个参数为函数名,不是 stateName。

参考链接

  1. vuex 中各个模块间互相调用 actions、mutations、state
  2. 在vuex的store能否可以获取当前页面的路由?

标签:projectId,默认,监听,选中,菜单项,Vuex,下拉框,路由,加载
From: https://www.cnblogs.com/shayloyuki/p/17535539.html

相关文章

  • SQL数据库-新增字段时,默认值依然为NULL
    SQL数据库-新增字段时,给默认值的方法代码如下:altertable表名ADD字段intNOT NULLDEFAULT 0alter table表名 ADD 字段 numeric(18, 4) NOT NULL DEFAULT 0;注:特点是:notnull ,如果是null,是不会赋默认值0的,如果是notnull,就会赋默认值0......
  • 修改默认alert样式
     alert简单的弹窗,常用于调试时判断代码执行到哪里出问题(类似断点)例子:alert("11111")this.$aleretthis.alert()方法用于显示带有一个标题,一条指定消息,一个关闭按钮和一个确定按钮的警告框。例子:this.$alert(`hhhhhhh`,'biaoti',{confirmButtonText:'......
  • 28.无缝滚动(默认向上滚动)
    vue-seamless-scroll使用手册:https://chenxuan0000.github.io/vue-seamless-scroll/zh/guide/properties.html步骤一:gitbash输入:npminstallvue-seamless-scroll--save步骤二:main.js全局注册importscrollfrom'vue-seamless-scroll'Vue.use(scroll)步骤三:组件中使用......
  • vue+element ui 表格选中特定行导出为excel
    1:使用场景:当选中表格中某几条数据(图中演示的为两行选中一行)进行导出为excel(如图二)2:安装依赖:npminstall--savexlsxfile-savernpminstall-Dscript-loader3:引入依赖文件:在src文件夹中创建名为excel的文件夹(注意大小写)将Blob.js、export2Excel.js两个js文件复制到exce......
  • 直播平台源码,默认页面几秒后自动跳转另一页面
    直播平台源码,默认页面几秒后自动跳转另一页面publicclassMainActivityextendsAppCompatActivity{   privatestaticfinallongDELAY=1000;  privateTimerTasktask;   @Override  protectedvoidonCreate(BundlesavedInstanceState){    ......
  • SQL Developer 默认是不会自动提交事务
    SQLDeveloper默认是不会自动提交事务SQLDeveloper这软件,在执行数据库数据修改操作时,并不会进行SQL提交。SQLDeveloper默认是不会进行自动提交,必须通过手动的方式提交。如:insertintomytable(id,name) values(1,'tom'); commit;......
  • MySQL创建默认当前时间字段
    MySQL创建一个时间字段默认当前时间,插入数据时无需给这个字段添加值,会自动默认当前时间类型:timestamp,默认值:CURRENT_TIMESTAMP ......
  • RV1126调试-修改默认调试串口
    背景RK系列的SDK给的默认的调试串口都是uart2/1500000波特率,本次调试设备已经把console调试口改为了uart0,所以需要修改下uboot和内核,然后把波特率设为常用的115200。注:本次调试的SDK版本为原厂的V2.2版本1.uboot修改1)修改rv1126-evb.dts和rv1126-u-boot.dtsi把uart2改成uart......
  • elementui 时间选择器默认时间格式
    <el-date-pickerv-model="searchForm.date"@change="getDate"type="daterange"range-separator="至"......
  • Eplan-菜单项
    Eplan-菜单项##菜单项使用Eplan菜单的使用主要是添加菜单,和添加二级菜单,涉及到3个添加的方法AddMainMenu()AddMenuItem()AddPopupMenuItem()初始化和创建publicclassEplanMenu:IEplAddIn{publicboolOnExit(){returntrue;......