Vue声明式路由

在vue3中的声明式路由

  <router-view class="page" />

router-view是一个视图容器 (通常叫做一个坑 用来放vue组件 )

  <router-link to="/">首页</router-link>

router-link在浏览器中会默认渲染为 a 标签

这样在a标签里面通过href属性跳转的页面 href属性写一个#号叫锚点跳转

vue的路由跳转都是基于原生js中的 pushState这个属性 是实现锚点跳转的方法 我们也可以在网上查找关于pushState的信息

 我们通常会把他放在也页面底部 做tab 在平常情况下我们不会用a标签来写这个tab,所以我们就又用到了 router-link的另一个属性 custom 属性 来改变我们的 标签  举个例子 我把他转换为 li 标签

 <router-link to="/" custom > <li>首页</li> </router-link>

在浏览器中我们看到了 渲染成这个样子

 

但是这个时候我们 在点击li 时又无法跳转页面了 

 当我们在router-link上写上custon属性时 这个标签上面就开启了一个插槽 我们可以使用插槽内的属性

   <router-link to="/" custom v-slot="{ navigate }">
          <li @click="navigate">首页</li>
   </router-link>

这样就可以跳转

在Vue2的声明式路由

 <router-link to="/" tag="li">首页</router-link>

我们直接在router-link中写上 tag属性 ,在浏览器就变成了li标签 

这个时候看我们看到vue2的比vue3简单不少 

结合日常使用我们在选中的时候应该给我们文字添加选中色 

 我们可以看到有这样两个类名 。在我们的样式中只要写到

.router-link-exact-active {
  color: red;
}

这样就可以做到点击谁谁的颜色就是红色

router-link-exact-active是必须精确匹配到当前路由才会添加这个类名 

router-link-active是只要 当前路由包含之前点击过 路由地址的 就会有这个类名

这两个东西 在我们vue给我提供了配置它的东西 

一个是 active-class ,exact-active-class

<router-link to="/" tag="li" active-class="normal" exact-active-class="active">
首页
</router-link>

 我们在浏览器中可以看到 变成了这两个类名

 

 active-class 给匹配到的路由地址添加的类名 默认值是 router-link-active

 exact-active-class 路由地址精确匹配到的时候添加的类名 默认值是router-link-exact-active

 我们可以再vue的官网上看到这两个东西  vue2的官网

在vue3的官网上我们也可以看到插槽内的属性 很多  vue3的官网地址

我们这里用 isActive,和isExactActive  

isActive代表了 我们刚才在vue2中写的active-class 如果是true就代表他有这个类名

isExactActive就代表了另一个精确匹配到的  

  <router-link to="/" custom v-slot="{ navigate, isExactActive }">
          <li @click="navigate" :class="isExactActive ? 'active' : ''">首页</li>
        </router-link>

    <style lang="scss">
        .active {
          color: red;
        }
    </style>

        这样点击选中的时候就会有 active这个类名 和vue2的一比较vue3的更灵活 想要哪个就写哪个 

这就是声明式路由 声明式路由拥有路由跳转的所有方法 

1、 比如页面跳转到详情页 要携带参数 

  <router-link to="/detail?id=123">进入详情页</router-link>

我们可以看到可以携带参数到详情页  这种我们一般不常用

2、 我们传参是一般和query一起使用  我们可以这样写

 <router-link :to="{
      path: '/detail',
      query: {
        id: 123,
        name: 'zhangsan'
      }
    }">进入详情页</router-link>

这样我们路由里就有两个参数

3、我们这里也可以不用path路径去跳转页面   也可以用name去跳转

   <router-link to="detail?id=124">进入详情页</router-link> 

name和path都可以用作路由去跳转并且都可以携带参数

4、params不能和path合用传递参数 


     <router-link :to="{
      path: '/detail',
      params: {
        id: 123,
        name: 'zhangsan'
      }
    }">进入详情页</router-link>

这个是我们的错误写法

5、所以我们得用name来和params一起使用

<!-- 这种传参方式参数不会显示在路由地址 但是刷新页面会丢失 好处是参数是隐藏起来的地址栏中是看不到旳-->
      <router-link :to="{
      name: 'detail',
      params: {
        id: 123,
        name: 'zhangsan'
      }
     
    }">进入详情页</router-link> -->

6、这里可能有人就要问了 能不能即用query也用params  那当然是可以的 直接上代码

我们知道path和params合用传参所以我们这里用 name 

但是这种方法我们日常中并不这样用 有点鸡肋 

<router-link :to="{
      name: 'detail',
      params: {
        id: 123,
        name: 'zhangsan'
      },
      query: {
        a: '德玛西亚'
      }
    }">进入详情页</router-link> 

这就是我对vue的声明式路由的 一个总结

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
Vue3中,可以使用<router-link>标签进行声明路由跳转。这个标签可以帮助我们生成包含正确的“to”属性的链接,以便跳转到指定的路由。可以在<router-link>标签的to属性中指定目标路由的路径,也可以在其中传递一个路由对象,使得路由跳转更加灵活和方便。 通过使用<router-link>标签,我们可以在Vue3中实现声明路由导航,而无需手动操作路由的跳转。这种方更加简洁、直观,并且能够提高代码的可读性和维护性。 同时,Vue3中的路由还可以通过<router-view>标签来承载当前级别下的子级路由的页面。这个标签的作用是显示当前路由级别下一级的页面内容。通过在路由配置中定义不同层级的路由和对应的组件,我们可以实现页面之间的无缝切换和导航。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Vue3.0路由跳转方](https://blog.csdn.net/zxyhj/article/details/125083816)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [vue相同路由跳转强制刷新该路由组件操作](https://download.csdn.net/download/weixin_38748382/12924338)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值