2022-10-25 vue的声明式导航和编程式导航的定义和写法区别

本文介绍了Vue的两种导航方式:声明式导航和编程式导航。声明式导航通常用于点击链接触发,如使用`router-link`,在新老版本Vue Router中有不同的写法。编程式导航则涉及调用API进行导航,适用于动态决定跳转场景。

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

声明式导航

在浏览器中,点击链接实现导航的方式,叫做声明式导航

使用场景
  • 在网页中点击<a>链接实现网页的切换;
  • 在Vue项目中点击<router-link></router-link>切换组件
声明式导航新老版本的写法
  • 1.使用a标签实现网页切换
<li><a href="/#/films">电影</a></li>
<li><a href="/#/cinermas">影院</a></li>
<li><a href="/#/center">我的</a></li>
  • 2.使用router-link实现声明式导航:dom结构自带a标签
<li><router-link to="/films">电影</router-link> </li>
<li><router-link to="/cinermas">影院</router-link> </li>
<li><router-link to="/center">我的</router-link> </li>

也可以添加自定义 class 属性名,然后添加样式。

 <li><router-link to="/films" router-link-active="myclassactive">电影</router-link> </li>
  • 3.使用<router-link tag='li'></router-link>代替<li><router-link></router-link></li>
<router-link to="/films" tag='li'>电影</router-link>
<router-link to="/cinermas" tag='li'>影院</router-link>
<router-link to="/center" tag='li'>我的</router-link>

此时会获得一个警告: tag属性已弃用,应使用v-slot代替

vue-router.esm.js?8c4f:16 [vue-router]
 <router-link>'s tag prop is deprecated and has been removed in Vue Router 4. 
 Use the v-slot API to remove this warning:

出现这个警告,是因为在 vue router4 中需要按照下面这个方法来写:

  • 4.使用<router-link custom v-slot="{navigate,isActive}"></router-link>实现声明式导航
<router-link to="/films" custom v-slot="{navigate,isActive}">
  <li @click="navigate" :class="isActive?'myactive':''">
    电影--{{isActive}}
  </li>
  </router-link>
  <router-link to="/cinermas" custom v-slot="{navigate,isActive}">
  <li @click="navigate" :class="isActive?'myactive':''">
    影院--{{isActive}}
  </li>
  </router-link>
  <router-link to="/center" custom v-slot="{navigate,isActive}">
  <li @click="navigate" :class="isActive?'myactive':''">
    我的--{{isActive}}
  </li>
  </router-link>
编程式导航

在浏览器中,调用API方法实现导航的方式,叫做编程式导航

使用场景
  • 在普通的网页中我们会去掉用location.href跳转到新页面
  • 在vue-router中调用API方法实现导航
常见编程式导航API
this.$router.push('Hash地址')//跳转到指定Hash地址,且增加一条历史记录
this.$router.replace('Hash地址')//跳转到指定Hash地址,且替换掉当前历史记录
this.$router.go('Number')//在浏览器历史记录中前进或者后退(1、-1......),如果超出上限的话,则原地不动
示例

App.vue

<template>
  <div>
      <button @click="fn">点击</button>
  </div>
</template>
<script>
import router from "vue-router"// 导入vue-router
export default {
    methods:{
    fn(){
      this.$router.replace("Center");
    }
  }
};
</script>

效果:点击后从http://localhost:8080跳转到http://localhost:8080/#/Center

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

前端OnTheRun

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值