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,一经查实,立即删除!

相关文章

王者荣耀铭文说明

1、铭文作用 铭文&#xff0c;是指在进入游戏之前你可以为你的英雄额外增加的一些属性。一套好的铭文可以说是召唤师的第七件装备。 铭文&#xff0c;卡攻速阈值&#xff1b;卡暴击效果阈值&#xff0c;卡生命阈值等 2、铭文划分 一套铭文页有十个蓝色&#xff0c;十个绿色…

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…

宽度优先搜索

又有的时候&#xff0c;我们还会碰到这样一些貌似可以用深搜解决&#xff0c;但又有点茫然打不出深搜程序的题&#xff1a;奇怪的电梯、倒牛奶、面积……这些问题&#xff0c;问的都是最怎么怎么样&#xff0c;但也是从一个起点出发往下走。怎么办&#xff1f;这时候我们就要用…

MongoDB安装及接入springboot

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

STM32窗口看门狗的操作

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

css基础之定位、元素的显示与隐藏

定位 一、定位position组成 定义定位模式边偏移&#xff0c; 1.定位模式用于指定一个元素在文档中的定位方式 通过css的positon属性设置&#xff0c;其值分为四个: 静态定位&#xff1a;static 相对定位&#xff1a;relative 绝对定位&#xff1a;absolute 固定定位&#x…

读书笔记——《高质量C++/C编程指南》(5)

目录 前言 类的构造函数、析构函数与赋值函数 构造函数与析构函数的起源 构造函数的初始化表 构造和析构的次序 示例&#xff1a;类String 的构造函数与析构函数 不要轻视拷贝构造函数与赋值函数 示例&#xff1a;类String 的拷贝构造函数与赋值函数 偷懒的办法处理拷贝…

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 …

OpenCV 阈值法

1.概述 在深度学习出现之前&#xff0c;图像中的阈值法处理主要有二值阈值法、自适应阈值法、Ostu阈值法。 2.理论对比 3.代码实现 #include <iostream> #include <opencv2/opencv.hpp>int main(int argc, char** argv) {if(argc ! 2) {std::cerr << "…

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

文章目录 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.调用系统函数向进程发…

隆重庆贺中华人民共和国成立七十五周年,中国科学技术大学全体师生祝福祖国强盛

隆重庆贺中华人民共和国成立七十五周年中国科学技术大学全体师生祝福祖国强盛卡西莫多 华夏曾经炮声隆 亿万黎民饥寒重 列强瓜分举杯庆 条约割肉斟血贺 饕餮盛宴沃野中 地大物博多浮华 曾多膏脂送肉人 我辈悲苦先祖民 曾经如此患难共 皆因内乱又失和 才致如此覆巢国 领袖聚沙垒…

使用 TensorFlow.js 和 OffscreenCanvas 实现实时防挡脸弹幕

首先&#xff0c;要理解我们的目标&#xff0c;我们将实时获取视频中的面部区域并将其周围的内容转为不透明以制造出弹幕的“遮挡效应”。 步骤一&#xff1a;环境准备 我们将使用 TensorFlow.js 的 Body-segmentation 库来完成面部识别部分&#xff0c;并使用 OffscreenCanv…

tvm.frontend.from_pytorch详细介绍(1)

文章目录 一、pytorch前端整体转化流程&#xff08;部分&#xff09;1.脚本化的pytorch模型2.内联优化(_run_jit_passes)2.1、内联优化2.2 什么是内联函数 3.graph中的所有op(get_all_op_names)3.1 各个变量的值1 .graph2 .nodes3 .p nodes4、返回结果 二、from_pytorch完整代码…

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

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

3、Qt--配置文件的使用

开发平台&#xff1a;Win10 64位 开发环境&#xff1a;Qt Creator 13.0.0 构建环境&#xff1a;Qt 5.15.2 MSVC2019 64位 一、需求及方案 实际开发过程中&#xff0c;我们需要根据本地的配置文件&#xff0c;去配置我们的程序&#xff0c;比如数据库地址、网络地址等信息&…

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