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;

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

ClickHouse备份方案

ClickHouse备份方案主要包括以下几种方法&#xff1a; 一、使用clickhouse-backup工具&#xff1a; &#xff08;参考地址&#xff1a;https://blog.csdn.net/qq_43510111/article/details/136570850&#xff09; **安装与配置&#xff1a;**首先从GitHub获取clickhouse-bac…

Node.js是什么(基础篇)

前言 Node.js是一个基于Chrome V8 JavaScript引擎的开源、跨平台JavaScript运行时环境&#xff0c;主要用于开发服务器端应用程序。它的特点是非阻塞I/O模型&#xff0c;使其在处理高并发请求时表现出色。 一、Node JS到底是什么 1、Node JS是什么 Node.js不是一种独立的编程…

vue3页面传参

一&#xff0c;用query传参 方法&#xff1a; router.push({path: ‘路由地址’, query: ‘参数’}) 例子&#xff1a;a页面携带参数跳转到b页面并且b页面拿到a页面传递过来的参数 在路由router.ts配置 a页面&#xff1a; <template><div >a页面</div>…

基于YOLOv5的火灾检测系统的设计与实现(PyQT页面+YOLOv5模型+数据集)

基于YOLOv5的火灾检测系统的设计与实现 概述系统架构主要组件代码结构功能描述YOLOv5检测器视频处理器主窗口详细代码说明YOLOv5检测器类视频处理类主窗口类使用说明环境配置运行程序操作步骤检测示例图像检测视频检测实时检测数据集介绍数据集获取数据集规模YOLOv5模型介绍YOL…

测试辅助工具(抓包工具)的使用2 之 抓包工具的基本用法

1.过滤设置: Filters- --- 勾选use Filters- --- 下拉选择show only the following hosts ---- 输入域名或者ip地址(多个地址用;隔开) --- 点击action(Run filterset now) 2.删除数据 方式一:点击Remove all 方式二: 黑窗口输入cls,回车 删除一条数据:选中数据---右键选择Rem…

【硬件开发】共模电感

为什么电源无论直流还是交流的输入端都需要一个共模电感 图中L1就是共模电感&#xff0c;长下面这个样子&#xff0c;两侧的匝数&#xff0c;线径和材料都是一模一样的 共模电感的作用是为了抑制共模信号 抑制共模信号工作原理 http://【共模电感是如何抑制共模信号的】https…

SpringCloud - 微服务

1、微服务介绍 参考&#xff1a; 微服务百度百科 1.1 概念 微服务&#xff08;或称微服务架构&#xff09;是一种云原生架构方法&#xff0c;在单个应用中包含众多松散耦合且可单独部署的小型组件或服务。 这些服务通常拥有自己的技术栈&#xff0c;包括数据库和数据管理模型&…

windows git配置多个账号

window下git多账号配置_百度搜索 (baidu.com) 最重要的是这里生成新的id_rsa文件的时候&#xff0c;bash窗口是在 .ssh路径下 其实就是这个窗口在什么路径下执行的就是生成在什么路径 下面窗口路径不对&#xff0c;不是Desktop&#xff0c;应该是.ssh 如果是Desktop或者任何一…

YOLOv9摄像头或视频实时检测

1、下载yolov9的项目 地址&#xff1a;YOLOv9 2、使用下面代码进行检测 import torch import cv2 from models.experimental import attempt_load from utils.general import non_max_suppression, scale_boxes from utils.plots import plot_one_box# 加载预训练的YOLOv9模型…

CausalMMM:基于因果结构学习的营销组合建模

1. 摘要 在线广告中&#xff0c;营销组合建模&#xff08;Marketing Mix Modeling&#xff0c;MMM&#xff09; 被用于预测广告商家的总商品交易量&#xff08;GMV&#xff09;&#xff0c;并帮助决策者调整各种广告渠道的预算分配。传统的基于回归技术的MMM方法在复杂营销场景…

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

C++ 教程 - 04 类的使用

文章目录 类的定义类定义案例构造函数 类的定义 C 在 C 语言的基础上增加面向对象编程&#xff0c;类是用于指定对象的形式&#xff0c;是一种用户自定义的数据类型&#xff0c;封装了数据和函数。类可以被看作是一种模板&#xff0c;可以用来创建具有相同属性和行为的多个对象…

【Qt笔记①】帮助文档、窗口、按钮、信号和槽、lambda表达式

学习第一天&#xff1a;2024-3-9 文章目录 Qt creator 快捷键帮助文档默认生成的main.cpp逐行解释核心类帮助文档的查阅方法-①代码创建按钮第一个第二个对窗口的其他设置 对象树窗口坐标系信号和槽&#xff08;优点&#xff1a;松散耦合&#xff09;帮助文档的查阅方法-②找信…

VBA:demo大全

VBA常用小代码合集&#xff0c;总有一个是您用得上的~ (qq.com) 如何在各个分表创建返回总表的命令按钮&#xff1f; 今天再来给大家聊一下如何使用VBA代码&#xff0c;只需一键&#xff0c;即可在各个分表生成返回总表的按钮。 示例代码如下&#xff1a; Sub Mybutton()Dim …

基于YOLOV5的车辆行人检测系统的设计与实现(PyQT页面+YOLOv5模型)

简介 随着智能交通系统的发展,实时检测车辆和行人变得越来越重要,以提高道路安全和交通管理效率。我们开发了一种基于YOLOv5目标检测模型的车辆与行人检测系统。本报告将详细介绍该系统的实际应用与实现,包括系统架构、功能实现、使用说明、检测示例、数据集获取与介绍、YO…

泛微E9与金蝶云星空ERP的无缝集成案例详解(包括接口与字段)

业务系统现状 背景介绍 泛微E9和金蝶云星空ERP是两款广泛应用与企业管理的信息系统&#xff0c;分别在移动办公自动化和企业资源计划管理领域占据重要地位。然而企业在使用这些系统时往往面临着信息孤岛和系统孤立的问题&#xff0c;导致数据无法在不系统之间高效流转共享。 当…

微信小程序毕业设计-在线厨艺平台系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

JavaWeb——MySQL:DDL操作库

目录 1.DDL&#xff1a;查询数据库&#xff1b; 1.1 查询数据库 1.2 创建数据库 1.DDL&#xff1a;查询数据库&#xff1b; 具体操作&#xff1a;增 删 查 用 &#xff1b; 1.1 查询数据库 SQL语句&#xff1a;show databases; 由于我创建过一些数据库&#xff0c;我查询的…

Spring AI 介绍以及与 Spring Boot 项目整合

Spring AI 项目旨在简化使用 Spring Boot 开发包含人工智能功能的应用程序&#xff0c;提供抽象和支持多种模型提供商及矢量数据库提供商。 Spring AI 的功能特点 支持主流模型提供商&#xff1a;如 OpenAI、Microsoft、Amazon、Google 和 Huggingface 等。支持多种模型类型&a…

ViT:4 Pruning

实时了解业内动态&#xff0c;论文是最好的桥梁&#xff0c;专栏精选论文重点解读热点论文&#xff0c;围绕着行业实践和工程量产。若在某个环节出现卡点&#xff0c;可以回到大模型必备腔调或者LLM背后的基础模型重新阅读。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;…