• 作者:老汪软件技巧
  • 发表时间:2024-10-02 07:01
  • 浏览量:

路由的工作模式history模式

URL不带#,需要服务的配合处理路径问题,否则刷新会有404错误。

const router = createRouter({
  history: createWebHistory(),
})

hash模式

URL带#, 在SEO优化方面相对较差

SEO(Search Engine Optimization)即搜索引擎优化,是一种通过对网站进行内部调整和优化(如网站结构、内容、代码等)以及外部推广(如链接建设、社交媒体营销等),以提高网站在搜索引擎结果页面(SERP)上的排名,从而增加网站流量和曝光度的技术和策略。

const router = createRouter({
  history: createWebHashHistory(),
})

嵌套路由

使用children属性,在一个视图(组件)中嵌套另一个视图(组件)在一个视图(组件)中嵌套另一个视图(组件)

const router = createRouter({
  history: createWebHistory(),
  routes: [{
    path: '/news',
    component: ()=>import("@/components/News.vue"),
    children: [
      {
        path: 'detail',
        component: ()=>import("@/components/Detail.vue")
      }
    ]
  }]
})

路由传参query参数第一种写法(字符串)

传递query参数,直接在路径后面加?key=value&key=value形式

<RouterLink to="/news/detail?item=5">新闻{{ item }}RouterLink>

获取query参数


首先引入vue-router里的useRoute调用useRoute获取到route从route.query里面获取到参数第二种写法(对象)

<RouterLink
    :to="{
      path: '/news/detail',
      query: {
        item,
      },
    }"
    >
    新闻{{ item }}
RouterLink>

params参数第一种写法(字符串)

直接在url后面用/拼接,但是在router.js里面需要在路径提前占位

// News.vue
<RouterLink to="/news/detail/item/5">
    新闻{{ item }}
RouterLink>

// router/index.ts
{
    path: '/news',
    component: ()=>import("@/components/News.vue"),
    children: [
      {
        path: 'detail/:item',
        component: ()=>import("@/components/Detail.vue")
      }
    ]
}

query是什么意思__query怎么读

第二种写法(对象)

params传参的对象形式,只能使用name。

<RouterLink
    :to="{
      name: 'detail',
      params: {
        item: 5,
      },
    }"
    >
    新闻{{ item }}
RouterLink>

路由的props属性

作用:让路由组件更方便的收到参数(可以将路由参数作为props传给组件)

第一种写法

添加配置props:true手动开启,这种方式返回params参数。

{
    path: '/news',
    component: ()=>import("@/components/News.vue"),
    children: [
      {
        name: "detail",
        path: 'detail/:item',
        component: ()=>import("@/components/Detail.vue"),
        props: true
      }
    ]
}

第二种写法

把query参数以props方式返回

{
    name: "detail",
    path: 'detail',
    component: ()=>import("@/components/Detail.vue"),
    props(route) {
      return route.query
    }
}

replace属性

replace方法是vue-router提供的一个方法,用于替换当前的历史记录条目,而不是像push方法那样添加一个新的历史记录条目。

<RouterLink
    replace
    :to="{
      name: 'detail',
      query: {
        item: 5,
      },
    }"
 >
    新闻{{ item }}
RouterLink>

编程式路由导航

在vue2中是this.$router.push();而在vue3中由于setup中没有this,所以需要引入vue-router里的useRouter钩子函数,创建一个路由。


和router-link一样,可以写字符串,也可以写对象


路由重定向

routes: [{
    path: '/',
    redirect: "/home"
}]