Jeecgboot-vue2 前端动态设置 标签页标题

文章介绍了在JeecgBoot+Vue2项目中如何实现标签页标题的动态更新,主要通过Vue的provide和inject进行父子组件间通信,以及在处理路由meta信息时,为避免同一路由下所有标签页标题同步更新的问题,需要复制新的route对象来保持独立性。

jeecgboot+ vue2 标签页本来显示的是菜单的名称,要实现在页面里动态改标题。

如图:客户要求,在显示明细页面时,把明细内容标题显示在 标签页上。

实现原理就是利用 vue 的 provide和 inject 实现组件间的通讯。

直接上代码:

1、找到标签组件:src/components/layouts/TabLayout.vue

2、在methods:{里添加updateTitle方法}

 methods:{

        //原有方法省略.... 

         /*zk 添加更新 标签title的方法 */
        updateTitle(title) {
            let page = this.pageList.filter(item => item.fullPath == this.activePage)
            if (page && page[0]) {
                page[0].meta.title = title
            }
        },
        /*zk 添加更新 标签title的方法 END */
  }

看图

 3、provide()方法里,添加 updateTitle: this.updateTitle,

    provide(){
      return{
          closeCurrent: this.closeCurrent,
          /**20230307 zk 添加更新title的方法 */
          updateTitle: this.updateTitle,
      }
    },

 看图

 4、用法 在页面中添加引入   inject: ['updateTitle'],  调用:this.updateTitle('标题');

export default {
    inject: ['updateTitle'],  //引入更新标题的方法
 
    mounted(){
        //调用改标题
        this.updateTitle("新标题")
    }
}

5、补充一个问题 同一个路由下 会全部更新,这是因为mate.title是引用值类型。

解决办法就是在添加标签时,把meta复制一下。

} else if (this.linkList.indexOf(newRoute.fullPath) < 0) {             
            this.linkList.push(newRoute.fullPath)
            /*20230308 zk 复制一个route对象出来,不能影响原route  */
            let copyRoute = Object.assign({}, newRoute);
            copyRoute.meta = Object.assign({}, copyRoute.meta);
            this.pageList.push(Object.assign({}, copyRoute));
            //this.pageList.push(Object.assign({}, newRoute))
            /*20230308 zk 复制一个route对象出来,不能影响原route  */
} else if (this.linkList.indexOf(newRoute.fullPath) >= 0) {

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值