【声明式导航与编程式导航】

文章详细介绍了Vue.js中两种导航方式:声明式导航(通过router-link组件实现,包括to属性及传参方法)和编程式导航(利用$router.push或$router.replace函数)。声明式导航适用于静态或预定义的路由切换,而编程式导航在动态生成或复杂跳转场景下更为灵活。当数据量大时,为避免内存消耗和卡顿,推荐使用编程式导航。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

导航:即实现不同路由之间的切换


一、声明式导航(router-link)

1.使用

跳转到哪里,也就是to后面要写完整路径
实现切换:( active-class可配置高亮样式 )

 <router-link
              class="list-group-item"
              active-class="active"
              to="/home/message"
              >Message</router-link
            >

指定展示位置:

  <router-view> </router-view>

2.路由传参

  • 方式一
    携带query参数,to的字符串写法
<router-link :to="`/home/message/detial?id=${ m.id }&title=${m.title}`">{{ m.title }}</router-link>

携带params参数,to的字符串写法
配置的时候要用占位符
path: 'detial/:id/:title',

<router-link :to="`/home/message/detial/${ m.id }/${m.title}`">{{ m.title }}</router-link>
  • 方式二
    携带query参数,to的对象写法
    命名路由可以简化路由的跳转
<router-link :to="{
        //  name:'xiangqing',
            path:'/home'
            query:{
            id:m.id,
            title:m.title
            }
          }">
          {{ m.title }}
        </router-link>

携带query参数,to的对象写法
注意:对象写法时不能使用path,一定要用name配置项

 <router-link :to="{
            name:'xiangqing',
            params:{
              id:m.id,
              title:m.title
            }
          }">
          {{ m.title }}
        </router-link>
  • 接收参数
{{ $route.router.id }} 
$route.router.title
$route.params.id 
$route.params.title

二、编程式导航(push|replace)

不借助router-link实现路由跳转,可以用其他元素,如button等,让路由跳转更灵活

1.使用

实现切换:

  • 方式一
    push:就像栈,一个一个进,再出
   this.$router.push({
        name: 'xiangqing',
        query: {
        id: m.id,
        title: m.title
        }
      })
  • 方式二
    replace:总是替换前一个,最终结果只有最后一个路由
    replaceShow(m) {
      this.$router.replace({
        name: 'xiangqing',
        query: {
          id: m.id,
          title: m.title
        }
      })
    }

跳转行为:

  <button @click="back">后退</button>
  <button @click="forward">前进</button>
  <button @click="test">测试一下go</button>
methods: {
    back() {
      this.$router.back()//前进
    },
    forward() {
      this.$router.forward()//后退
    },
    test() {
      this.$router.go(1)//可前进也可后退,数字表示前进几步
    }
  }

在这里插入图片描述


三、用声明还是编程式导航

router-link也可以只使用一个。当服务器返回数据后,可以循环出很多个router-link组件。
但是如果有1000+数据组件实例,会很耗内存,因此会出现卡顿现象。
所以此时用编程式导航。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值