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) {// 如果当前组合的和超过了…

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

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

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

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

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---- ------ …

[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…

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

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

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

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

阅读笔记:明朝那些事儿妖孽横行的宫廷

明朝那些事儿第四部看完了&#xff0c;合上书本给我印象比较深刻的文臣要数王守仁&#xff0c;不愧为明朝的军事家&#xff0c;思想家&#xff0c;文学家&#xff0c;教育家&#xff0c;他经过多年的思索、磨难、追求&#xff0c;终于有一天&#xff0c;在穷乡僻壤&#xff0c;…

Linux的基本指令第二篇

1.cat - 查看文件 语法&#xff1a;cat [选项] [文件] 功能&#xff1a; 查看目标文件的内容 -b 对非空输出行编号 -n对输出的所有行编号 -s不输出多行空行 现有一个文件test.c cat -n test.c cat -b test.c cat -s test.c 创建一个新文件 加入源文件的内容 || …

数据分析:置换检验Permutation Test

欢迎大家关注全网生信学习者系列&#xff1a; WX公zhong号&#xff1a;生信学习者Xiao hong书&#xff1a;生信学习者知hu&#xff1a;生信学习者CDSN&#xff1a;生信学习者2 介绍 置换检验是一种非参数统计方法&#xff0c;它不依赖于数据的分布形态&#xff0c;因此特别适…

Linux——man帮助命令

一、man 获得帮助信息 基本语法&#xff1a;man [命令或配置文件] &#xff08;功能描述&#xff1a;获得帮助信息&#xff09; 查看 ls 命令的帮助信息 [roothadoop101 ~]# man ls man [数字] [函数] 1、Standard commands &#xff08;标准命令&#xff09; 2、System…

Apple创始人斯蒂夫乔布斯2005年在斯坦福大学的毕业典礼演讲:Steve Jobs‘ 2005 Stanford Commencement Address

Steve Jobs’ 2005 Stanford Commencement Address Link: https://www.youtube.com/watch?vUF8uR6Z6KLc and https://www.youtube.com/watch?vHd_ptbiPoXM 文章目录 Steve Jobs 2005 Stanford Commencement AddressSummaryVocabularyTranscriptConnecting the dotsLove and …

VC++支持断点续下或续传的功能

VC使用多线程和Socket实现断点续下 一、断点续下的基本原理&#xff1a; 1.断点续传的理解可以分为两部分&#xff1a;一部分是断点&#xff0c;一部分是续传。断点的由来是在下载过程中&#xff0c;将一个下载文件分成了多个部分&#xff0c;同时进行多个部分一起的下载&…

Adaboost集成学习 | Adaboost集成学习特征重要性分析(Python)

目录 效果一览基本介绍模型设计程序设计参考资料效果一览 基本介绍 Adaboost集成学习特征重要性分析(Python)Adaboost(自适应增强)是一种常用的集成学习方法,用于提高机器学习算法的准确性。它通过组合多个弱分类器来构建一个强分类器。在Adaboost中,每个弱分类器都被赋予…

Ocam:高效录屏,屏幕录制最佳?

名人说&#xff1a;&#xff1a;一点浩然气&#xff0c;千里快哉风。 ——苏轼 创作者&#xff1a;Code_流苏(CSDN)&#xff08;一个喜欢古诗词和编程的Coder&#x1f60a;&#xff09; 目录 一、软件介绍1、Ocam2、核心特点 二、下载安装1、下载2、安装 三、使用方法 很高兴你…

【5】apollo编写python节点步骤及实例

在workspace/modules下新建包buildtool create --template component modules/test_one 编译包 buildtool build -p modules/test_two/ 增加自己的proto消息 在刚才自动生成的proto文件里面添加自己定义的消息,记得重新编译. syntax "proto2";package apollo;…

【python】美妆类商品跨境电商数据分析(源码+课程论文+数据集)【独一无二】

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