Vue3路由及登录注销功能、设置导航守护功能模块

路由


在vue中,页面和组件都是.vue文件,可以说是一样的,结构、内容和生产方法都是一样,但是组件可以被反复使用,但页面一般只被使用一次。

路由的作用就是网页地址发生变化时,在App.vue页面的指定位置可以加载(渲染)指定的页面。

第一步

创建带路由依赖的项目

  1. 在命令行工具或终端中创建项目,运行命令Vue create routerobj,在下面选项中选择标红线的选项。
    在这里插入图片描述

  2. 在弹出的选项中,选择router选项,用方向键选择router,然后按空格键选定。
    在这里插入图片描述

第二步

用vscode打开新建的routerobj文件夹,在src文件中多了router和views文件夹。

第三步

Views文件夹里面和创建组件相同的方法去创建子页面。这里举例创建两个子页面Blog.vue和Video.vue。

  1. Blog.vue代码如下:

    <template><div><ul><li><router-link to="">HTML教程</router-link></li><li><router-link to="">JavaScript教程</router-link></li><li><router-link to="">Vue教程</router-link></li></ul></div>
    </template>
  2. Video.vue代码如下

    <template><div><h1>视频</h1><video src="" controls></video></div>
    </template>
第四步

在router/index.js文件中设置路由,完成引入要设置路由的子页面和设置路由两步操作。代码如下,标注了注释的为原代码中添加的部分:

import { createRouter, createWebHashHistory } from 'vue-router'
import HomeView from '../views/HomeView.vue'// 引入路由子页面
import Blog from '../views/Blog.vue'
import Video from '../views/Video.vue'const routes = [{// 引入方法1path: '/',name: 'home',component: HomeView},{// 引入方法2path: '/about',name: 'about',// route level code-splitting// this generates a separate chunk (about.[hash].js) for this route// which is lazy-loaded when the route is visited.component: () => import(/* webpackChunkName: "about" */ '../views/AboutView.vue')},//设置路由{path: '/blog',name: 'blog',component: Blog},{path: '/video',name: 'video',component: Video}
]const router = createRouter({history: createWebHashHistory(process.env.BASE_URL),routes
})export default router
第五步

在App.vue中设置引用子页面,修改template部分,把要链接的子页面设置链接,router-vies标签类似于子页面占位符。

<template><nav><router-link to="/">Home</router-link> |<router-link to="/about">About</router-link><!-- 1.修改链接地址,router-link相当于a标签,to属性相对与href --><router-link to="/blog">Blog</router-link><router-link to="/video">Video</router-link></nav><router-view/>
</template>
第六步

在终端中运行服务器,然后就可以在浏览器中查看结果

知识扩展

安装路由,在命令行或者vscode的终端中项目路径下,运行命令 npm install --save vue-router.

没有用-g 全局安装,而是在项目中安装路由,–save表示把添加的依赖写入到package.json。如果没有–save效果上也可以,但是加上可以更好到知道项目都使用了哪些组件。

案例1:在上面的实例上添加登录功能
  1. 在views文件夹中新建Login.vue文件,输入如下代码:

    <template><div id ="lo"><!-- vue中的@submit.prevent属性可以帮我们实现这个功能,当我们点击提交按钮时,表单并不会提交,而是会触发绑定的函数 --><form @submit.prevent="dologin"><tr><input type="text" v-model="username"></tr><tr><input type="text"></tr><button>登录</button></form></div>
    </template><script>export default{data(){return{username:""}},methods:{dologin(){//数据的本地存储localStoragelocalStorage.setItem('usr',this.username)}}}
    </script><style>
    #lo{width: 100%;height: 100%;/* border: 1px solid #000000; */display: flex;align-items: center;justify-content: space-around;}
    </style>
    
  2. 在router文件夹中的index.js文件中配置路由

    引入Login.vue子页面,代码为:import Login from ‘…/views/Login.vue’

    设置路由,代码为:

    {path: '/login',name: 'login',component: Login}
  3. 在App.vue文件中设置引入login子页面,代码如下:

    <template><nav><router-link to="/">Home</router-link> |<!-- <router-link to="/about">About</router-link> | --><!-- 1.修改链接地址,router-link相当于a标签,to属性相对与href --><router-link to="/blog">Blog</router-link> |<router-link to="/video">Video</router-link> ||<!-- 2.1使用login页面中的用户名数据 --><span>欢迎{{username}}</span> ||<router-link to="/login" >Login</router-link> |</nav><router-view/>
    </template><!-- 2.2链接登录子页面,要获取本地数据,为了不需要手动刷新页面需要对路由监听 -->
    <script>export default{data(){return{// 通过localStorage.getItem获得本地数据username:localStorage.getItem('usr')}},watch: {// 监听路由的变化,变化后自动刷新页面'$route.path':function(){this.username=localStorage.getItem('usr')}}}
    </script>
效果图

在这里插入图片描述

案例2:在上述功能的基础上添加注销功能

知识链接:一个应用如果没有登录一般情况是直接进入登录页,是看不到首页等内容页,而实现这个功能的基本方法是通过“导航守护”功能。

  1. 在router文件加的index.js文件中增加“导航守护”功能模块,在暴露接口语句export default router 前面增加的代码如下:

    // 导航守护,参数to是访问到哪里,from是从哪里访问,next是继续访问
    router.beforeEach((to, from, next) => {if (to.path !== "/login") {if (localStorage.getItem("usr"))next();elsenext("/login")}elsenext()
    })

    注意:导航守护功能模块在几乎所有的应用中均能使用到。

  2. 在App.vue文件中增加注销按钮,实现注销功能,注销之后用户数据被清除,要实现自动跳转到登录页面。实现代码如下,注意注释3.1~3.5部分是注销功能的实现代码。

    <template><nav><router-link to="/">Home</router-link> ||<!-- <router-link to="/about">About</router-link> | --><!-- 1.修改链接地址,router-link相当于a标签,to属性相对与href --><router-link to="/blog">Blog</router-link> ||<router-link to="/video">Video</router-link> ||<!-- 2.1使用login页面中的用户名数据 ,根据登录状态来判断是否显示欢迎--><!-- 注销功能3.3 增加v-if属性,没有--><span v-if="showusr">欢迎{{username}}||</span> <router-link to="/login" >Login</router-link> ||<!-- 注销功能3.1增加注销按钮,绑定单击事件logout --><button @click="logout">注销</button></nav><router-view/>
    </template><!-- 2.2链接登录子页面,要获取本地数据,为了不需要手动刷新页面需要对路由监听 -->
    <script>export default{data(){return{// 通过localStorage.getItem获得本地数据username:localStorage.getItem('usr'),// 注销功能3.4 showusr参数的值绑定用户名showusr:localStorage.getItem('usr')}},watch: {// 监听路由的变化,变化后自动刷新页面'$route.path':function(){this.username=localStorage.getItem('usr')// 注销功能3.5 监听showusr的值,注销后本地数据清空this.showusr=localStorage.getItem('usr')}},// 注销功能3.2注销方法的实现methods: {logout(){// 清除本地存储localStorage.clear();// 清除数据后,跳转到登录页this.$router.push("/login")}}}
    </script>
效果图

在这里插入图片描述

当前只能停留在Login页面,输入名字和密码登入后即可跳转页面

在这里插入图片描述

刷新后:
在这里插入图片描述

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

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

相关文章

17 M-LAG 配置思路

16 华三数据中心最流行的技术 M-LAG-CSDN博客 M-LAG 配置思路 什么是M-LAG&#xff1f;为什么需要M-LAG&#xff1f; - 华为 (huawei.com) 1 配置 M-LAG 的固定的MAC地址 [SW-MLAG]m-lag system-mac 2-2-2 2 配置M-LAG 的系统标识符系统范围1到2 [SW-MLAG]m-lag system-nu…

MongoDB安装及接入springboot

环境&#xff1a;windows、jdk8、springboot2 1.MongoDB概述 MongoDB是一个开源、高性能、无模式&#xff08;模式自由&#xff09;的文档&#xff08;Bson&#xff09;型数据库&#xff1b;其特点如下&#xff1a; 模式自由 ---- 不需要提前创建表 直接放数据就可以 支持高并…

STM32窗口看门狗的操作

STM32的窗口看门狗的主要功能是&#xff0c;程序过早的喂狗还有太晚喂狗&#xff0c;都会触发单片机重启&#xff0c;就是有一个时间段&#xff0c;在这个时间段内喂狗才不会触发单片机重启。 下面我就总结一下窗口看门狗的设置过程&#xff1a; 第一步&#xff1a;开启窗口看…

vscode怎么设置背景图片?

vscode背景图片是可以自己设置的&#xff0c;软件安装后默认背景的颜色是黑色的&#xff0c;这是默认的设计&#xff0c;如果要修改背景为指定的图片&#xff0c;那么我们需要安装插件&#xff0c;然后再通过代码来设置背景图片的样式&#xff0c;下面我们就来看看详细的教程。…

代数结构:5、格与布尔代数

16.1 偏序与格 偏序集&#xff1a;设P是集合&#xff0c;P上的二元关系“≤”满足以下三个条件&#xff0c;则称“≤”是P上的偏序关系&#xff08;或部分序关系&#xff09; &#xff08;1&#xff09;自反性&#xff1a;a≤a&#xff0c;∀a∈P&#xff1b; &#xff08;2…

旅游推荐管理系统(小组项目)

文章目录 前言 一、项目介绍 1. 项目目的 2. 项目意义 2.1 提升旅游体验 2.2 促进旅游业发展 2.3 数据积累与分析 2.4 提升服务品质 2.5 优化资源配置 二、项目结构 1. 主要使用的技术 1.1 若依&#xff08;Ruoyi&#xff09;框架 1.2 Vue.js框架 1.3 Ajax 1.4 …

【进程通信】了解信号以及信号的产生

文章目录 0.前言1.信号的基本概念1.1中断1.1.1 软中断1.1.2硬中断 1.2异步1.2.1异步和同步的比较 2.信号的主要用途3.信号的特点4.查看信号4.1Core和Term的区别4.2生成Core文件 5.初识捕捉信号5.1signal函数 6.产生信号的方式6.1.通过终端按键产生信号6.2.调用系统函数向进程发…

国内智能搜索工具实战教程

大家好,我是herosunly。985院校硕士毕业,现担任算法研究员一职,热衷于机器学习算法研究与应用。曾获得阿里云天池比赛第一名,CCF比赛第二名,科大讯飞比赛第三名。拥有多项发明专利。对机器学习和深度学习拥有自己独到的见解。曾经辅导过若干个非计算机专业的学生进入到算法…

分享10类正规的网上赚钱平台,让你摆脱单一收入

在这个互联网飞速发展的时代&#xff0c;你是否还在为单一的收入来源而焦虑&#xff1f;别担心&#xff0c;今天带你解锁10种网上赚钱的新姿势&#xff0c;让你的收入不再单一&#xff0c;甚至可能翻倍&#xff01; 1. 文库类&#xff1a;知识的变现 你知道吗&#xff1f;你的…

k8s 数据流向 与 核心概念详细介绍

目录 一 k8s 数据流向 1&#xff0c;超级详细版 2&#xff0c;核心主键及含义 3&#xff0c;K8S 创建Pod 流程 4&#xff0c;用户访问流程 二 Kubernetes 核心概念 1&#xff0c;Pod 1.1 Pod 是什么 1.2 pod 与容器的关系 1.3 pod中容器 的通信 2&#xff0c; …

imx91的uboot编译

一、准备操作 下载半导体厂家的uboot源码 如这里我要下载的是imx91的恩智浦linux芯片bootloader 进入半导体厂家官网 下载源码&#xff0c;略 更新linux源&#xff0c;这里我是替换成清华源 vi /etc/apt/sources.list deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ fo…

【江科大STM32学习笔记】新建工程

1.建立工程文件夹&#xff0c;Keil中新建工程&#xff0c;选择型号 2.工程文件夹里建立Start、Library、User等文件夹&#xff0c;复制固件库里面的文件到工程文件夹 为添加工程文件准备&#xff0c;建文件夹是因为文件比较多需要分类管理&#xff0c;需要用到的文件一定要复…

Web UI自动化测试--PO模式

没有PO实现的测试用例的问题: 重用性低:登录功能重复可维护性差:数据和代码混合可读性差:元素定位方法杂乱(id、xpath、css混杂)可读性差:不易识别操作的含义(特别是css和xpath语法)可维护性差:如果某个元素的属性改了,你要更改多次PO(Page Object Model)页面对象模型…

完全背包问题(c++)

完全背包问题 当前有 N 种物品&#xff0c;第 i 种物品的体积是 ci​&#xff0c;价值是 wi​。 每种物品的数量都是无限的&#xff0c;可以选择任意数量放入背包。 现有容量为 V 的背包&#xff0c;请你放入若干物品&#xff0c;使总体积不超过 V&#xff0c;并且总价值尽可…

YOLOv8+CLIP实现图文特征匹配

本文通过结合YOLOv8s的高效物体检测能力与CLIP的先进图像-文本匹配技术&#xff0c;展示了深度学习在处理和分析复杂多模态数据中的潜力。这种技术的应用不仅限于学术研究&#xff0c;还能广泛应用于工业、商业和日常技术产品中&#xff0c;以实现更智能的人机交互和信息处理。…

新年首站 | 宝兰德教育行业信创新动力发展研讨会顺利召开

近日&#xff0c;宝兰德携手慧点数码、安超云共同举办了教育行业信创新动力发展研讨会。会议邀请了中国人民公安大学、中国戏曲学院、北京航空航天大学、北京理工大学、华北电力大学、中国矿业大学、北京服装学院、北京城市学院等数十所高校信息中心负责人、专家出席了本次会议…

LeetCode 题目 120:三角形最小路径和

作者介绍&#xff1a;10年大厂数据\经营分析经验&#xff0c;现任字节跳动数据部门负责人。 会一些的技术&#xff1a;数据分析、算法、SQL、大数据相关、python&#xff0c;欢迎探讨交流 欢迎加入社区&#xff1a;码上找工作 作者专栏每日更新&#xff1a; LeetCode解锁1000题…

WEB后端复习——javabean与会话cookie、session

JavaBean 是一种符合特定命名约定的 Java 类&#xff0c;它通常用于封装数据。 JavaBean 的主要特点是&#xff1a; 1. 无参构造器&#xff1a;JavaBean 必须有一个公共的&#xff08;public&#xff09;无参构造方法&#xff0c;以便于反射时能够创建对象实例。 2. 属性&…

Android的视图显示和管理机制:layout view window WindowManager Canvas Surface

在Android系统中&#xff0c;Layout view window WindowManager Canvas Surface SurfaceFlinger这些组件协同工作&#xff0c;以实现图形的绘制和显示。需要搞明白这些组件是什么时候创建的以及他们之间的结构关系。 从上到下的层级关系&#xff1a;用户在View上进行操作&…

考研踩坑经验分享

文章目录 写在前面自身情况简介自身学习路线优点坑点 学习路线建议1、2和3月份3、4和5月份6、7和8月份9、10月份11、12月份 一些私货建议结尾 写在前面 考研是一件非常有盼头的事&#xff0c;但绝对不是一件容易的事。 如果你不能做好来年三月份出成绩时&#xff0c;坦然接受…