Vue的Router?一个小demo秒了

效果展示

正文

登录页

image.png

<template><div><div class="login"><h3>图书管理系统</h3><div class="user"><span>账号:</span><input type="text" v-model="user" /></div><div class="pwd"><span>密码:</span><input type="text" v-model="pwd" /></div><div class="btn"><button @click="login">登录</button></div></div></div>
</template>

这是一个简单的登录页的布局(css参考完整代码)

我们现在要实现输入账号和密码就能够跳转到home页怎么实现?

很简单

  1. 创建home页
  2. 配置路由
  3. 在登录点击事件里实现路由跳转
  • 创建home页

image.png

  • 配置路由
{path: "/home",component: Home,name: "home",},
  • 在登录点击事件里实现路由跳转
import { useRouter } from "vue-router";
import { ref } from "vue";const user = ref("");
const pwd = ref("");
const router = useRouter();const login = () => {if (user.value !== "" && pwd.value !== "") {localStorage.setItem("user", user.value);router.push("/home");}
};

通过 ref 创建了两个响应式变量 userpwd 来存储用户名和密码

然后,使用 useRouter 获取了路由实例 router

定义的 login 函数用于处理登录逻辑。当用户名和密码都不为空时,将用户名存储到本地存储 localStorage 中,并通过 router.push('/home') 跳转到 /home 路由对应的页面

接下来你就能实现下面的效果了

动画.gif

这里我们就了解了一级路由了

home页面

效果演示

动画.gif

我们通过home页面来讲解二级路由

首先我们创建基础页面

<div class="home"><header class="header"><div class="name">图书管理系统</div><div class="userInfo"><span>欢迎 {{ user }}</span></div></header><section class="main"><div class="menu"><ul class="menu-list"><li class="list-item" v-for="item in menu" :key="item.title"><router-link :to="`/home${item.path}`">{{item.title}}</router-link></li></ul></div><div class="content"><RouterView></RouterView></div></section></div>

同样是三步走

  1. 创建页面
  2. 配置路由
  3. 添加router-link触发
  • 创建页面

image.png

创建好对应的页面

  • 配置路由
{path: "/home",component: Home,name: "home",children: [{path: "/home/add-book",component: AddBook,name: "addbook",},{path: "/home/borrow",component: Borrow,name: "borrow",},{path: "/home/category",component: Category,name: "category",},{path: "/home/search",component: Search,name: "search",},],},
  • 添加router-link触发

我们首先创建一个用来存储菜单数据

export const menu = [{id: 1, title: '图书分类', path: '/category'},{id: 2, title: '查询图书', path: '/search'},{id: 3, title: '添加图书', path: '/add-book'},{id: 4, title: '借阅管理', path: '/borrow'}]

image.png

通过import { menu } from "../menuData";可以导入数据

使用v-for渲染数据

<li class="list-item" v-for="item in menu" :key="item.title"><router-link :to="`/home${item.path}`">{{item.title}}</router-link>
</li>

现在我们就能实现二级路由的效果了

一级路由和二级路由的区别主要在于路由的配置是不同的

总结

本文通过一个小demo,讲解了路由的使用,路由的使用主要就是在于路由的配置,相信看到这里的你一定会有收获的

完整代码

  • login
<template><div><div class="login"><h3>图书管理系统</h3><div class="user"><span>账号:</span><input type="text" v-model="user" /></div><div class="pwd"><span>密码:</span><input type="text" v-model="pwd" /></div><div class="btn"><button @click="login">登录</button></div></div></div>
</template><script setup>
import { useRouter } from "vue-router";
import { ref } from "vue";const user = ref("");
const pwd = ref("");
const router = useRouter();const login = () => {if (user.value !== "" && pwd.value !== "") {localStorage.setItem("user", user.value);router.push("/home");}
};
</script><style lang="css" scoped>
.login {background-color: #a6f9bb;border: 1px solid #ccc;width: 400px;height: 230px;position: absolute;left: 50%;top: 50%;transform: translate(-50%, -50%);box-shadow: 0 0 10px #ff000080;padding: 20px;box-sizing: border-box;
}
.input {border-radius: 10px;
}
.user {margin-bottom: 20px;display: flex;align-items: center;
}
.user span {width: 50px;
}
.user input {flex: 1;font-size: 20px;padding: 3px 10px;
}
.pwd {display: flex;align-items: center;margin-bottom: 10px;
}
.pwd span {width: 50px;
}.pwd input {flex: 1;font-size: 20px;padding: 3px 10px;
}button {display: block;width: 80%;margin: 0 auto;padding: 5px 0;background-color: #009688;border: none;border-radius: 20px;cursor: pointer;
}
h3 {margin-bottom: 20px;text-align: center;
}
</style>
  • home
<template><div><div class="home"><header class="header"><div class="name">图书管理系统</div><div class="userInfo"><span>欢迎 {{ user }}</span></div></header><section class="main"><div class="menu"><ul class="menu-list"><li class="list-item" v-for="item in menu" :key="item.title"><router-link :to="`/home${item.path}`">{{item.title}}</router-link></li></ul></div><div class="content"><RouterView></RouterView></div></section></div></div>
</template><script setup>
import { menu } from "../menuData";const user = localStorage.getItem("user");
</script><style lang="css" scoped>
.home {height: 100vh;display: flex;flex-direction: column;
}
.header {height: 60px;background-color: #beffca;display: flex;justify-content: space-between;align-items: center;padding: 0px 50px;
}
.name {font-size: 30px;font-weight: bold;
}
.main {flex: 1;display: flex;
}
.menu {flex: 0 0 200px;background-color: #00a00d;
}
.content {flex: 1;
}
.menu-list {padding: 20px 0;
}
.list-item {height: 40px;line-height: 40px;font-size: 16px;
}
.list-item a {display: block;width: 100%;height: 100%;text-align: center;
}
.list-item:hover {background-color: #ecc536;
}
</style>
  • 路由
import { createRouter, createWebHistory } from "vue-router";
import Login from "../views/Login.vue";
import Home from "../views/Home.vue";
import AddBook from "../views/pages/AddBook.vue";
import Borrow from "../views/pages/Borrow.vue";
import Category from "../views/pages/Category.vue";
import Search from "../views/pages/Search.vue";const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: "/",redirect: "/login",},{path: "/login",component: Login,name: "login",},{path: "/home",component: Home,name: "home",children: [{path: "/home/add-book",component: AddBook,name: "addbook",},{path: "/home/borrow",component: Borrow,name: "borrow",},{path: "/home/category",component: Category,name: "category",},{path: "/home/search",component: Search,name: "search",},],},],
});export default router;
import { createRouter, createWebHistory } from "vue-router";
import Login from "../views/Login.vue";
import Home from "../views/Home.vue";
import AddBook from "../views/pages/AddBook.vue";
import Borrow from "../views/pages/Borrow.vue";
import Category from "../views/pages/Category.vue";
import Search from "../views/pages/Search.vue";const router = createRouter({history: createWebHistory(import.meta.env.BASE_URL),routes: [{path: "/",redirect: "/login",},{path: "/login",component: Login,name: "login",},{path: "/home",component: Home,name: "home",children: [{path: "/home/add-book",component: AddBook,name: "addbook",},{path: "/home/borrow",component: Borrow,name: "borrow",},{path: "/home/category",component: Category,name: "category",},{path: "/home/search",component: Search,name: "search",},],},],
});export default router;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/32773.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

193.回溯算法:组合总和(力扣)

代码解决 class Solution { public:vector<int> res; // 当前组合的临时存储vector<vector<int>> result; // 存储所有符合条件的组合// 回溯函数void backtrcing(vector<int>& nums, int target, int flag, int index) {// 如果当前组合的和超过了…

C++:字符串string类使用

C字符串和C字符串的对比 (1)C语言严格说没有字符串的概念&#xff0c;C字符串其实就是字符数组或字符指针 (2)C和之后的java等都有字符串&#xff0c;本质是一个class (3)C字符串的优势是标准库自带可用于字符串的各种处理算法和方法 (4)C实际开发中建议使用C字符串而不是沿用…

高可用电商支付架构设计方案

高可用电商支付架构设计 在现代电商业务中&#xff0c;支付过程是其中至关重要的一环&#xff0c;一个高可用、安全稳定的支付架构不仅可以提高整个系统的可靠性和扩展性&#xff0c;降低维护成本&#xff0c;还可以优化用户体验&#xff0c;增加用户黏性。 本文将提出一种高…

121.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件读取与发送界面设计

免责声明&#xff1a;内容仅供学习参考&#xff0c;请合法利用知识&#xff0c;禁止进行违法犯罪活动&#xff01; 如果看不懂、不知道现在做的什么&#xff0c;那就跟着做完看效果 现在的代码都是依据数据包来写的&#xff0c;如果看不懂代码&#xff0c;就说明没看懂数据包…

Vue 路由跳转时携带参数怎么写?(持续完善中...)

Vue前端中由A页面跳转至B页面&#xff0c;需要携带参数&#xff0c;应该怎么样实现呢&#xff1f; 一、参数为id A页面&#xff1a; // 点击跳转链接&#xff0c;并携带id至B页面 const toViewNewsDetail (value) > {const path /newsPublish/newsDetail;router.push({…

Kubernetes之Service详解

本文尝试从Service暴露服务方式、Service控制器实现原理、使用规范等方面对Kubernetes 中的Service进行详细介绍。 一、Kubernetes 中的pod有哪些暴露服务的方式 各种 Kubernetes 中暴露服务的方式都有其独特的优缺点&#xff0c;根据具体的使用场景和需求&#xff0c;选择合…

在Windows10中使用Vim

服务器没有图形界面&#xff0c;但是numpy包又需要调用图形界面接口&#xff0c;这样就导致了错误&#xff0c;搞得我只好先回windows开发。看来当年 Ubuntu桌面版也不算是多此一举啊。 这么多ide我还是喜欢vim&#xff0c;因为它真的太简单了。咱们这个老年机启动的也非常快&…

【jenkins1】gitlab与jenkins集成

文章目录 1.Jenkins-docker配置&#xff1a;运行在8080端口上&#xff0c;机器只要安装docker就能装载image并运行容器2.Jenkins与GitLab配置&#xff1a;docker ps查看正在运行&#xff0c;浏览器访问http://10....:8080/2.1 GitLab与Jenkins的Access Token配置&#xff1a;不…

力扣爆刷第153天之TOP100五连刷31-35(合并区间、编辑距离、复原IP)

力扣爆刷第153天之TOP100五连刷31-35&#xff08;合并区间、编辑距离、复原IP&#xff09; 文章目录 力扣爆刷第153天之TOP100五连刷31-35&#xff08;合并区间、编辑距离、复原IP&#xff09;一、56. 合并区间二、124. 二叉树中的最大路径和三、72. 编辑距离四、19. 删除链表的…

Kubernetes排错(七)-Pod 状态一直 ContainerCreating

查看 Pod 事件 $ kubectl describe pod apigateway-6dc48bf8b6-l8xrw -n cn-staging 异常原因 1&#xff09;no space left on device ... Events:Type Reason Age From Message---- ------ …

Google项目管理总览(一)

目录 一、项目管理基础 1.1、项目 1.2、项目管理 1.2.1、重要性&#xff08;why&#xff09; 1.2.2、项目生命周期 1.2.3、方法论&#xff08;项目管理&#xff09; 1.3、项目经理 1.3.1、构建人际关系的技巧 1.3.2、注意 1.4、组织架构 1.5、组织文化 二、Project …

Crypto/Util/number.py“, line 139 value |= 2L ** (N-1) # Ensure high bit is set

Crypto/Util/number.py", line 139 value | 2L ** (N-1) # Ensure high bit is set 解决办法 pip3 install pyrebase4

[SAP ABAP] 读取内表数据

1.读取单条数据 1.1 索引查找 语法格式 READ TABLE <itab> INTO <wa> INDEX <idx>.<itab>&#xff1a;代表内表 <wa>&#xff1a;代表工作区 <idx>&#xff1a;代表索引值 示例1 结果显示&#xff1a; 1.2 关键字查找 READ TABLE <…

Redis协议规范简介

Redis客户端使用为名为RESP&#xff08;Redis序列化协议&#xff09;的协议与Redis服务器进行通信。虽然该协议是专门为Redis设计的&#xff0c;但它也可以用于其他的CS软件项目的通信协议。 RESP可以序列化不同的数据类型&#xff0c;如整型&#xff0c;字符串&#xff0c;数…

【python】python海底捞门店营业数据分析与可视化(数据集+源码+论文)【独一无二】

&#x1f449;博__主&#x1f448;&#xff1a;米码收割机 &#x1f449;技__能&#x1f448;&#xff1a;C/Python语言 &#x1f449;公众号&#x1f448;&#xff1a;测试开发自动化【获取源码商业合作】 &#x1f449;荣__誉&#x1f448;&#xff1a;阿里云博客专家博主、5…

pyttsx3:Python文本到语音转换库的全面指南

目录 引言 一、pyttsx3 简介 二、安装 pyttsx3 三、基本用法 四、配置语音属性 五、支持的命令和功能 六、高级用法 结语 引言 在当今的软件开发中&#xff0c;提供语音交互功能已成为提升用户体验的一种重要方式。Python&#xff0c;作为一种广泛使用的编程语言&#x…

JavaSE基础总结复习之面向对象の知识总结

目录 Java语言的基础特点 面向对象 类和对象 类 类的构造 一&#xff0c;发现类 二&#xff0c;发现类的共有属性&#xff08;成员变量&#xff09; 三&#xff0c;定义类的成员方法&#xff08;行为&#xff0c;动词&#xff09; 四&#xff0c;使用类创建对象 对象…

vue3使用 JSX / TSX语法

一、什么是 JSX / TSX JSX / TSX 语法 JSX 是一种将XML语法嵌入到JavaScript中的语法。在 Vue3 中&#xff0c;我们可以使用JSX语法来编写组件的模板。使用JSX语法可以让我们更加灵活地定义组件的模板&#xff0c;并且可以让我们在编写组件时使用JavaScript的全部语言特性。 …

05-5.5.2 并查集

&#x1f44b; Hi, I’m Beast Cheng &#x1f440; I’m interested in photography, hiking, landscape… &#x1f331; I’m currently learning python, javascript, kotlin… &#x1f4eb; How to reach me --> 458290771qq.com 喜欢《数据结构》部分笔记的小伙伴可以…

【面试干货】HashSet 和 TreeSet 的区别

【面试干货】HashSet 和 TreeSet 的区别 1、实现方式HashSetTreeSet 2、性能添加、删除和查找操作的时间复杂度HashSetTreeSet 3、元素唯一性4、迭代顺序HashSetTreeSet 5、使用场景HashSetTreeSet 6、示例代码 &#x1f496;The Begin&#x1f496;点点关注&#xff0c;收藏不…