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 = [
  {
    // 引入方法1
    path: '/',
    name: 'home',
    component: HomeView
  },
  {
    // 引入方法2
    path: '/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(){
                    //数据的本地存储localStorage
                    localStorage.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();
        else
          next("/login")
      }
      else
        next()
    })
    
    

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

  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页面,输入名字和密码登入后即可跳转页面

在这里插入图片描述

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

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

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

相关文章

【数据结构】双向循环链表专题解析

实现自己既定的目标&#xff0c;必须能耐得住寂寞单干。&#x1f493;&#x1f493;&#x1f493; 目录 •✨说在前面 &#x1f34b;知识点一&#xff1a;双向链表的结构 • &#x1f330;1."哨兵位"节点 • &#x1f330;2.双向带头循环链表的结构 &#x1f34b;…

[C#] 使用HttpClient请求https地址报错的解决方案

当使用HttpClient请求HTTPS地址遇到报错时&#xff0c;下面将解析并提供可能的解决方案供参考。 文章目录 异常代码无法定位错误的准确定位错误的 常见错误错误1错误2 解决问题生产环境开发环境 异常代码 首先&#xff0c;需要查看引发异常的代码部分, 无法定位错误的 以下代…

《完美黑暗》重启版6月发布,分析指出开发“没有问题” 状况没那么

易采游戏网5月12日消息&#xff0c;在21世纪初的游戏界&#xff0c;一款名为《完美黑暗》的FPS游戏在N64平台上崭露头角&#xff0c;以其独特的剧情设定和丰富的武器系统赢得了众多玩家的喜爱。然而&#xff0c;这款作品在推出时也并非一帆风顺&#xff0c;受到了不少玩家的吐槽…

C++ | Leetcode C++题解之第77题组合

题目&#xff1a; 题解&#xff1a; class Solution { public:vector<int> temp;vector<vector<int>> ans;vector<vector<int>> combine(int n, int k) {// 初始化// 将 temp 中 [0, k - 1] 每个位置 i 设置为 i 1&#xff0c;即 [0, k - 1] 存…

springcloud整合网关(springcloud-gateway) 跨域处理

pom引入依赖 <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-gateway</artifactId></dependency><!-- 服务注册 --><dependency><groupId>com.alibaba.cloud</groupId&…

使用Pandas对Data列进行基于顺序的分组排列

目录 一、引言 二、Pandas库简介 三、按照数据列中元素出现的先后顺序进行分组排列 四、案例分析 五、技术细节探讨与扩展应用 1. 技术细节 2. 扩展应用 3. 示例代码&#xff1a;用户行为分析 4. 进阶应用&#xff1a;分组后的聚合操作 5. 分组后的数据筛选 6. 分组…

【算法】滑动窗口——找到字符串中所有字母异位词

本节博客是对题目——找到字符串中所有字母异位词的从读题到代码实现以及优化的详细解读&#xff0c;有需要借鉴即可。 目录 1.题目2.滑动窗口 哈希数组3.异位词优化4.总结 1.题目 题目链接&#xff1a;LINK 首先来解释一下什么是异位词&#xff0c;所谓“异位词”&#xf…

JavaWeb文件上传/下载(Servlet)

效果 文件下载 文件上传 项目概述 Jakarta EE9&#xff0c;Web项目 项目文件结构 0 maven依赖&#xff0c;资源文件 <!-- lombok插件--> <dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId&g…

最新的云渲染100活动有哪些?渲染100邀请码1a12

随着科技的进步&#xff0c;云渲染已经成为设计行业的必备工具&#xff0c;各个云渲染平台为了吸引用户也推出各种各样的活动&#xff0c;今天我们以广受好评的渲染100为例&#xff0c;来说下它们的活动体系。 1、新用户活动 渲染100对新用户很友好&#xff0c;提供了充足的测…

欢乐钓鱼大师攻略,怎么获取道具?

在《欢乐钓鱼大师》的游戏世界中&#xff0c;道具是提升钓鱼体验、解锁新功能以及完成挑战的关键。通过多种方式获取道具&#xff0c;能够帮助玩家更好地探索游戏世界、挑战自我&#xff0c;以及与其他玩家展开竞争。以下是关于如何获取道具的详细攻略&#xff0c;让你能够在游…

AI写作推荐-写文ai-AI在线写作生成器-3步完成写作任务

AI写作利器&#xff1a;推荐几款神助攻文案创作工具 随着技术的进步&#xff0c;人工智能&#xff08;AI&#xff09;已达到高级水平&#xff0c;在众多领域展现其强大能力。 在文本创作的领域&#xff0c;人工智能&#xff08;AI&#xff09;应用已显著地提升了写作效率和创意…

Java后端实现对象与文件接收数据(minio测试)

实现思路&#xff1a; 1. 两个接口实现&#xff0c;一个接对象数据(file)&#xff0c;一个接文件数据(json)。 2. json对象(base64String) 实体类信息 &#xff0c;请求体统一接收 3. file, String name ,String password ,String name &#xff0c; Controller层接收 统一…

环形链表(给定一个链表的头节点 head ,返回链表开始入环的第一个节点)的原理讲解

一&#xff1a;题目 二&#xff1a;原理讲解 解决这个题目 &#xff0c;我们得先理解它的原理。 1&#xff1a; 首先假设两个指针&#xff0c;一个快指针fast&#xff0c;一个慢指针slow&#xff0c;fast一次移动两个节点&#xff0c;slow一次移动一个节点。&#xff08;前面…

MF自定义控件方法

在MFC中&#xff0c;您可以通过自定义控件来实现特定的用户界面元素或功能&#xff0c;以满足您的应用程序需求。自定义控件通常是从CWnd类派生的子类&#xff0c;您可以在其中重写绘制、处理事件等方法&#xff0c;以实现您想要的功能和外观。以下是一般步骤&#xff1a; 创建…

【Java】变量类型

类变量&#xff1a;独立于方法之外的变量&#xff0c;用static修饰实例变量&#xff1a;独立于方法之外的变量&#xff0c;不过没有static修饰局部变量&#xff1a;类的方法中的变量 示例1&#xff1a; public class test_A {static int a;//类变量(静态变量)String b;//实例…

【JAVA进阶篇教学】第十篇:Java中线程安全、锁讲解

博主打算从0-1讲解下java进阶篇教学&#xff0c;今天教学第十篇&#xff1a;Java中线程安全、锁讲解。 当涉及到多线程编程时&#xff0c;保证线程安全是至关重要的。线程安全意味着在多个线程访问共享资源时&#xff0c;不会发生数据错乱或不一致的情况。为了实现线程安全&am…

问题:幂等性 分布式session

web项目中请求线程到service层的时候远程调用服务之前是串行化执行每个任务都要get阻塞等待任务完成&#xff0c;举例当用户在购物车页面点击去结算就会请求后台toTrade请求获取订单确认的详情数据并渲染到订单详情页&#xff0c;现在在toTrade请求中使用异步任务编排Completab…

微信授权登录02-移动端

目录 ## 前言 1.准备工作 1.1 网站域名 1.2 微信公众号 2.授权登录开发 2.1 前端开发 2.1.1 调起微信授权页面 ## 调起微信授权页面效果图 2.1.2 用户允许授权后回调处理 2.2 后端开发 2.2.1 根据code查询用户信息 2.2.2 自动注册登录 ## 后记 ## 前言 上一篇写…

Nios-II编程入门实验

文章目录 一 Verilog实现流水灯二 Nios实现流水灯2.1 创建项目2.2 SOPC添加模块2.3 SOPC输入输出连接2.4 Generate2.5 软件部分2.6 运行结果 三 Verilog实现串口3.1 代码3.2 引脚3.3 效果 四 Nios2实现串口4.1 sopc硬件设计4.2 top文件4.3 软件代码4.4 实现效果 五 参考资料六 …

nodeJs用ffmpeg直播推流到rtmp服务器上

总结 最近在写直播项目 目前比较重要的点就是推拉流 自己也去了解了一下 ffmpeg FFmpeg 是一个开源项目&#xff0c;它提供了一个跨平台的命令行工具&#xff0c;以及一系列用于处理音频和视频数据的库。FFmpeg 能够执行多种任务&#xff0c;包括解封装、转封装、视频和音频…