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

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

声明式导航

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

使用场景
  • 在网页中点击<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

### Vue.js编程式路由与声明式路由的区别及用法 #### 一、定义与基本概念 在 Vue.js 的路由系统中,存在两种主要的导航方式:**声明式路由****编程式路由**。这两种方式各有特点,在不同的场景下具有各自的适用性。 - **声明式路由**是指通过 `<router-link>` 组件来实现页面之间的跳转[^3]。 - **编程式路由**则是利用 `this.$router` 提供的方法(如 `.push()` 或 `.replace()`)来进行程序化的路由控制[^3]。 --- #### 二、声明式路由详解 ##### 使用方法 声明式路由的核心在于使用 `<router-link>` 标签完成页面间的切换操作。其语法如下: ```html <router-link :to="{ path: &#39;目标路径&#39; }">链接文字</router-link> ``` 或者更简单的写法: ```html <router-link to="/about">关于页面</router-link> ``` ##### 特点 1. 更加直观易懂,适合用于静态页面中的超链接跳转。 2. 支持传递查询参数或动态路径参数[^4]。 ```html <!-- 动态路径 --> <router-link :to="&#39;/user/&#39; + userId">用户详情</router-link> <!-- 查询参数 --> <router-link :to="{ path: &#39;/search&#39;, query: { q: &#39;关键词&#39; }}">搜索</router-link> ``` ##### 场景应用 适用于 UI 层面的操作,比如菜单栏、按钮点击触发的简单页面跳转。由于其实现逻辑较为清晰,因此非常适合前端开发者快速构建界面交互功能。 --- #### 三、编程式路由详解 ##### 使用方法 编程式路由依赖于 JavaScript 脚本执行路由跳转动作,常见的两个核心函数分别是 `push` `replace` 方法。 - `this.$router.push(location)`:向历史记录栈新增一条记录并跳转到指定位置。 - `this.$router.replace(location)`:替换当前的历史记录而不增加新条目。 示例代码展示如何调用这些 API 完成不同类型的跳转需求: ```javascript // push 示例 this.$router.push(&#39;/home&#39;); // replace 示例 this.$router.replace({ name: &#39;UserProfile&#39;, params: { id: this.userId, }, }); // 带有查询参数的例子 this.$router.push({ path: &#39;/search&#39;, query: { keyword: &#39;Vue Router&#39; } }); ``` ##### 特点 1. 高度灵活可控,允许基于条件判断或其他业务逻辑决定下一步的行为方向。 2. 可以轻松集成异步处理流程,例如登录验证成功后再转向特定页面等复杂情形下的管理变得更为便捷高效。 ##### 场景应用 当面对复杂的业务逻辑时尤为有用——例如表单提交后的重定向、错误提示页显示以及权限校验等功能均可以通过编程手段更好地满足实际开发过程中遇到的各种挑战需求。 --- #### 四、对比总结表格 | 对比维度 | 声明式路由 | 编程式路由 | |------------------|------------------------------------|-----------------------------------| | 实现形式 | HTML标签 (`<router-link>`) | JS脚本 (`.push()`, `.replace()`) | | 易用程度 | 简洁直白 | 较为复杂 | | 控制能力 | 有限 | 强大 | | 应用场合 | 页面间固定连接 | 条件分支、动态行为 | --- ### 结论 无论是选择哪种方式进行路由管理都取决于具体的应用场景个人偏好。如果只是单纯为了创建一些基础性的网站结构,则推荐优先考虑采用更加简便快捷的声明式做法;而对于那些涉及较多互动要素或者是需要高度定制化体验的产品而言,则应该充分利用好强大的编程接口所提供的各种可能性。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

前端OnTheRun

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

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

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

打赏作者

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

抵扣说明:

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

余额充值