vue3+router4的基本使用

news/2024/11/20 21:17:37/

一、安装router

npm i vue-router

二、路由跳转

2.1 创建路由实例

src目录下创建router文件夹,在其中创建一个index.js文件,创建路由实例。
通过vue-routercreateRouter方法创建一个router对象。其中有historyroutes

1.history:

  • history是前端路由库提供的一个对象,负责管理浏览器历史记录的状态和导航。
  • 它可以通过push、replace、go等方法来控制浏览器的历史记录。并相应地更新当前页面的显示内容。
  • history对象根据所使用的路由类型不同,可以是浏览器原生的window.history,也可以是createBrowserHistory、createHashHistory等函数创建的自定义对象。

2.routes:

  • routes表示路由配置,指定了不同URL对应的组件及其其他属性。
  • 路由配置一般以树状结构的方式组织,每个路由都包含一个路径(path),和对应的路由组件(component)。
  • 在路由系统中,可以根据匹配到的URL路径来渲染相应的组件,从而实现页面的切换和导航。
  • 通过配置不同的路由规则,可以构建出应用程序的不同页面和导航逻辑。

src/router/index.js

/***  路由文件*///引入router
import { createRouter, createWebHistory } from 'vue-router'// 定义路由组件路径
/*这里的path和name都是自定义命名
*/
const routes = [{name: 'login',  path: '/login',component: () => import('../components/login.vue')}, {name: 'registry',path: '/registry', component: () => import('../components/registry.vue')}
];// 创建Router对象
const router = createRouter({history: createWebHistory(),routes
})// 导出对象export default router;

2.2 挂载路由实例

main.js

import { createApp } from 'vue'
import App from './App.vue'
// 引入全局路由
import router from './router'const app = createApp(App)app.use(router)
app.mount('#app')
// createApp(App).mount('#app')

2.3 创建页面组件

login.vue

<template><div class="login"><h1>我是login页面</h1></div>
</template>
export default {name: 'login',setup() {return {}}
}

registry.vue

<template><div><h1>我是registry页面</h1></div>
</template>
export default {name: 'registry',setup() {return {}}
}

2.4 通过router-link跳转

在Vue Router中,<router-view>是用作路由占位符的组件。它是被放置在Vue应用模板中的一个特殊标记,用于渲染当前活跃的路由组件。当使用Vue Router进行路由管理时,你可以在路由配置中定义不同的路径与对应的组件。当用户访问不同的路径时,<router-view>会自动根据当前路径匹配到的组件来展示内容。
<router-view>可以将路由地址和组件映射起来,可以使用<router-link>来进行页面跳转。它的to属性,能够跳转到对应的path,从而展示path下的component组件。

App.vue

<template><h1>路由跳转</h1><div><!-- 通过路由name、path完成跳转 --><router-link :to="{name:'login'}">login</router-link><span>------------</span><router-link to="/registry">registry</router-link><router-view ></router-view></div>
</template>

在这里插入图片描述
在这里插入图片描述

2.5 通过js方法跳转

<script setup>
import { useRouter} from 'vue-router'const router = useRouter(); // 通过路由path跳转const toLink = (path) => {router.push(path)}// 通过路由name跳转const toLink1 = (name) => {router.push({name:name})}  </script>
<template><div class="btn"><!-- 通过js方法完成路由跳转 --><button @click="toLink('/login')">按钮1--->login</button><button @click="toLink1('registry')">按钮2--->registry</button></div>
</template>

三、路由传参

3.1 query

<script setup>
import { useRouter,useRoute } from 'vue-router'const router = useRouter();const route = useRoute();// 通过路由传参const toLink2 = (path) => {router.push({name: path,query:{name:'zhangsan',pwd:'123456'}})// 截取路由参数console.log(rouet.query);
}</script><template><h1>路由传参</h1><div class="btn"><!-- 通过路由传参 --><button @click="toLink2('registry')">to registry</button></div>
</template>

在这里插入图片描述
在这里插入图片描述

3.2 params

先修改path的值,再用params传参
router/index.js

 {name: 'login',path: '/login',component: () => import('../components/login.vue')}, {name: 'registry',path: '/registry/:name', // 使用param需要修改path的形式component: () => import('../components/registry.vue')}

App.vue

<script setup>
import { useRouter,useRoute } from 'vue-router'const router = useRouter();const route = useRoute();// 通过路由传参const toLink3 = (path) => {router.push({name: path,params:{name:'lisi'}})console.log(route.params);} </script><template><h1>路由传参</h1><div class="btn"><!-- param --><button @click="toLink3('registry')">param</button></div>
</template>

在这里插入图片描述
在这里插入图片描述

四、路由嵌套

Vue的路由嵌套指的是在一个路由配置中,将多个子路由组织成一个层级结构。这样可以更好地管理和组织复杂的应用程序页面。要创建嵌套路由,需要再父路由中定义子路由,并在组件内部使用<router-view>标签来显示子路由的内容。

/***  路由文件*///引入router
import { createRouter, createWebHistory } from 'vue-router'// 定义路由组件路径
const routes = [{path: '/',redirect: { path: '/home' }, // 重定向到path为 home 的路由},{name: 'home',path: '/home',component: () => import('../components/home.vue'),children: [{name: 'login',path: '/home/login',component: () => import('../components/login.vue')}, {name: 'registry',path: '/home/registry', component: () => import('../components/registry.vue')}]},];

home.vue

<template><div><div>导航栏组件</div><hr><router-link to="/home/login">去login页</router-link><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><router-link to="/home/registry">去registry页</router-link><hr><router-view /> </div>
</template>

App.vue

<script setup></script><template><h1>嵌套路由</h1><router-view ></router-view>
</template>

在这里插入图片描述

在这里插入图片描述

五、路由重定向

在Vue Router中,路由重定向是指当用户访问某个路径时,将其重定向到另一个路径。这可以通过路由配置中的redirect属性来实现。

const routes = [{path: '/',redirect: '/home' // 当用户访问根路径'/'时,重定向到'/home'},{path: '/home',component: Home}
]

http://www.ppmy.cn/news/404403.html

相关文章

React性能优化API

一、常见性能优化API shouldComponentUpdate&#xff1a;通过重写该函数实现组件的条件渲染&#xff0c;即只有在组件的 props 或 state 发生变化时才重新渲染组件。 PureComponent&#xff1a;React 自带的一个纯组件&#xff0c;其 shouldComponentUpdate 函数已经被自动实现…

验证attention是否在图像分类问题上起决定性作用

来源&#xff1a;投稿 作者&#xff1a;摩卡 编辑&#xff1a;学姐 Motivation 现阶段出现了大量的Transformer-style图像分类模型&#xff0c;并且这些模型在ImageNet上取得了不俗的成绩&#xff0c;这些Transformer-style模型将取得高性能的功劳归功于Multi-head attention注…

【实战】 项目起航:项目初始化与配置 —— React17+React Hook+TS4 最佳实践,仿 Jira 企业级项目(一)

文章目录 一、项目起航&#xff1a;项目初始化与配置1.项目初始化 —— create-react-app2.格式化 —— Prettier3.提交规范 —— commitlint4.Mock —— json-server 学习内容来源&#xff1a;React React Hook TS 最佳实践-慕课网 相对原教程&#xff0c;我在学习开始时&am…

MySQL----索引

文章目录 一、索引的概念二、索引的作用索引的副作用创建索引的依据 三、索引的分类和创建3.1普通索引创建直接索引修改表方式创建创建表的时指定索引&#xff08;不推荐使用&#xff09; 3.2唯一索引直接创建唯一索引修改表方式创建创建表时指定 3.3主键索引创建表的时指定修改…

【数据库三】MySQL事务

MySQL事务 1.事务的概念2.事务的ACID特点3.知识点总结 1.事务的概念 事务是一种机制、一个操作序列&#xff0c;包含了一组数据库操作命令&#xff0c;并且把所有的命令作为一个整体&#xff0c;一起向系统提交或撤销操作请求&#xff0c;即这一组数据库命令要么都执行&#x…

【C++进阶】带你手撕AVL树

文章目录 一、什么是AVL树二、AVL树的定义三、AVL树的插入1.理论讲解2.代码实现 四、AVL树的旋转1.左单旋2.右单旋3.左右双旋4.右左双旋 五、 AVL树的验证六、完整源码 一、什么是AVL树 二叉搜索树虽可以缩短查找的效率&#xff0c;但如果数据有序或接近有序二叉搜索树将退化为…

Pinia:Vue.js状态管理的下一代

引言 在现代Web应用程序开发中&#xff0c;状态管理是一个不可或缺的部分。Vue.js是一种流行的前端框架&#xff0c;它提供了Vuex作为其默认的状态管理解决方案。然而&#xff0c;随着Vue社区的不断壮大和进步&#xff0c;我们迫切需要一个更简单、更直观的状态管理库。这就是…

C#开发的OpenRA游戏之建造物品的窗口3

C#开发的OpenRA游戏之建造物品的窗口3 前面已经分析TAB窗口来分类管理不同物品的创建,主要分为5大类,但是这5大类是怎么样实现显示的呢,下面就来分析这个问题。 先来看一下类ProductionTabsWidget的构造函数: public ProductionTabsWidget(World world) { this.worl…