vue3 route跳转的new tab两种方式

文章介绍了Vue单页面应用(SPA)的特性,强调了路由在页面跳转中的作用,特别是如何在SPA中实现站内新标签页跳转,通过query传递参数,并在目标组件中解析。同时,也提到了多页面应用(MPA)的特点作为对比。
摘要由CSDN通过智能技术生成

Vue有两种类型的应用SPA和MAP,本文主要介绍的是SPA类型下面的使用方法

SPA (single page application)

单页面应用,即一个web项目就只有一个页面(即一个HTML文件)

这种类型通常都需要router来进行页面跳转. 一开始只需要加载一次js、css的相关资源。所有内容都包含在主页面,对每一个功能模块组件化。单页应用跳转,就是切换相关组件,仅仅刷新局部资源

SPA + 站内new Tab

功能:在站内以一个新页面打开跳转的路由

路由配置如下:

        {
            name: "testlog",
            path: '/dworks/log/testlog',
            component: components('SurroundingLog.tsx'),
            //用props可以将跳转链接里面的参数,注入到目标组件的props属性里面
            props: (route)=>{
                return { show:JSON.parse(route.query.show),
                         row: JSON.parse(route.query.row)};
            },
            meta: {title: '日志', roles: ['dev', 'admin'] },
        }

子组件示例如下:

const props = {
    row: {
        type: Object as PropType<ContextQueryParam>,
        default: {}
    },
    show: {
        type: Boolean as PropType<boolean>,
        default: false
    },
    pageType: {
        type: String as PropType<string>
    }
}
const SurroundingLog = defineComponent({
    name: "SurroundingLog",
    props,
    emits: ['update:show'],
    setup(props, ctx) {

    const resetData = () => {
      //业务逻辑

    }

    onMounted(()=>{
            //为了避免将 {} 识别成不为空,需要使用下面的判断方式, 不能用 if(route.query)
          if(Object.keys(route.query).length !== 0){
              resetData()
          }
        })

    
    return {resetData}
    },

    render(){

      return (

      <div>
        {this.$props.row.message}
      </div>

      )
    }

    })
export default SurroundingLog

父组件示例如下:

                    const to=router.resolve({
                        name:"surroundingLog",
                        query:{
                            show: 'true',
                            row: JSON.stringify(variables.rowContextParam),
                        }
                    })
                    window.open(to.href, "_blank");

父组件里面的跳转的时候要注意,需要使用query传字符串参数,如果是一个对象参数,则需要通过JSON的stringify方法将其转为字符串,这是因为这些参数会被拼接到http的url里面,所以仅支持字符串类型,这就是为什么要在routers路由里面入口前,通过props函数又将这些字符串参数转回props属性真正的类型的原因

        {
            name: "testlog",
            path: '/dworks/log/testlog',
            component: components('SurroundingLog.tsx'),
            //用props可以将跳转链接里面的参数,注入到目标组件的props属性里面
            props: (route)=>{
                return { show:JSON.parse(route.query.show),
                         row: JSON.parse(route.query.row)};
            },
            meta: {title: '日志', roles: ['dev', 'admin'] },
        }

SPA + 站外new Tab

站外Tab,可以使用超链接直接跳转,也可以使用router,这里记录下使用router的方法

  {
    path: '/suggestFeedback',
    name: 'suggestFeedback',
    meta: { icon:'md-headset', title: '反馈',roles:[]},
    beforeEnter(to, from, next) {
      window.open("https://www.baidu.com", '_blank')
      window.location.replace("/product/list")
    }
  }

MPA (multi page application)

多页面应用,指有多个独立页面的应用(多个html页面),每个页面必须重复加载js、css等相关资源。多页应用跳转,需要整页资源刷新。项目是由多个完整的页面组成。多页面跳转刷新所有资源,每个公共资源(js、css等)需选择性重新加载。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你使用了vue-router进行路由跳转,但是tab标签页没有跟着跳转,可能是因为你没有为tab标签页设置相应的路由。 一种解决方法是,为每个标签页设置一个对应的路由,然后在路由跳转时,同时更新选中的标签页。例如: ```javascript // 在路由配置中设置每个标签页对应的路由 const routes = [ { path: '/home', component: Home, meta: { tab: 'home' } }, { path: '/about', component: About, meta: { tab: 'about' } }, { path: '/contact', component: Contact, meta: { tab: 'contact' } } ]; // 在页面中使用<router-view>来显示当前路由对应的组件 <template> <div> <div class="tabs"> <div :class="{ active: activeTab === 'home' }" @click="selectTab('home')">Home</div> <div :class="{ active: activeTab === 'about' }" @click="selectTab('about')">About</div> <div :class="{ active: activeTab === 'contact' }" @click="selectTab('contact')">Contact</div> </div> <router-view></router-view> </div> </template> <script> export default { data() { return { activeTab: 'home' }; }, methods: { selectTab(tab) { // 更新选中的标签页 this.activeTab = tab; // 跳转到对应的路由 this.$router.push({ path: '/' + tab }); } }, watch: { // 监听路由变化,更新选中的标签页 $route(to) { this.activeTab = to.meta.tab; } } }; </script> ``` 这样,在跳转路由时,标签页也会跟着更新。如果你使用的是其他的标签页组件库,也可以根据类似的原理进行修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值