【Vue 2.x】学习vue之三路由

server/2024/10/21 11:34:57/

在这里插入图片描述

文章目录

  • Vue
    • 三路由
    • 第十章
      • 1、vue中的路由
        • vue的应用分为
          • a、多页面应用
          • b、单页面应用
      • 2、路由的基本应用
          • 1、基础
          • 2、使用
          • 3、加载
      • 3、vue组件的分类
        • 1、普通组件
        • 2、路由组件
      • 4、路由的嵌套
      • 5、路由传递Query参数
        • 1、拼接参数传递
        • 2、路由传递对象
      • 6、简化路由
        • 1、命名路由
      • 7、parms传递参数
        • 1、拼接字符串传递
      • 8、路由缓存
    • 第十一章
      • 1、vue中的路由守卫
        • 什么是路由守卫
        • 路由守卫的分类
      • 2、配置全局路由守卫
        • 1、前置路由守卫
          • 组件的跳转
        • 2、后置路由守卫
      • 3、vue UI的命令生成vue项目结构
      • 4、Element UI
      • 5、用户管理系统
        • 1、头部组件
        • 2、主体区域
          • 1、左边导航
          • 2、右边展示区
    • 第十二章
      • 后台管理系统(elementUI)
        • 1、与后台交互
        • 2、**分页后序号连续显示**
        • 3、往后台传递日期
        • 4、路由重定向
        • 5、路由跳转
        • 6、localStorage与sessionStorage
    • 第十二章
      • 后台管理系统(elementUI)
        • 1、与后台交互
        • 2、**分页后序号连续显示**
        • 3、往后台传递日期
        • 4、路由重定向
        • 5、路由跳转
        • 6、localStorage与sessionStorage

Vue

这是v2版

三路由

第十章

vue中的路由

elementUI的使用

1、vue中的路由

作用:主要是为了实现‘SPA-单页面应用’,根据请求的地址,呈现不同的组件route:路由(线路)
router:路由器
vue的应用分为
a、多页面应用
		一个页面由多个子页面构成
b、单页面应用
	SPA应用:单页面应用1、 单页 Web 应用(single page web application,SPA)。2. 整个应用只有一个完整的页面。3. 点击页面中的导航链接不会刷新页面,只会做页面的局部更新。4. 数据需要通过 ajax 请求获取。

2、路由的基本应用

1、基础
1、导入素材
2、导入外部样式文件一般导入到public/css目录下3、在public/index.html导入样式文件,所有vue组件即可应用这些样式<link rel="stylesheet" href="<%= BASE_URL %>css/bootstrap.css"><%= BASE_URL %>---public/4、创建两个组件about,home5、修改app.vue中的代码,在页面创建:‘路由组件中的展示区’<!-- 路由展示区 --><router-view></router-view>6、修改app.vue中的代码,在页面创建:‘路由组件中的导航区’将页面中的超链接替换:<a class="list-group-item" href="./about.html">About</a><a class="list-group-item active" href="./home.html">Home</a>替换后:<router-link class="list-group-item" active-class="active" to="/about">About</router-link>
2、使用
 7、使用路由a、安装路由组件npm i vue-router------->路由4.0--->vue3.0npm i vue-router@3----->路由3.0--->vue2.0b、在src目录下编写route目录以及index.js文件,该文件用于指定路由规则//导入路由插件import VueRouter from "vue-router";//导入home组件以及about组件import home from '../components/home'import about from '../components/about'import { component } from "vue/types/umd";//创建路由器指定规则,并暴露路由规则export default new VueRouter({//指定路由规则routes:[{//请求地址是/homepath:"/home",//在路由展示区中显示哪一个组件component:home},{//请求地址是/aboutpath:"/about",//在路由展示区中显示哪一个组件component:about},]})
3、加载
  8、在main.js文件中加载路由组件import Vue from 'vue'import App from './App.vue'//引入路由插件import VueRouter from 'vue-router'//引入路由index.jsimport router from './route/index'//使用路由插件Vue.use(VueRouter)Vue.config.productionTip = falsenew Vue({render: h => h(App),//在实例中配置路由器router: router,}).$mount('#app')

3、vue组件的分类

1、普通组件
这类组件使用与路由无关---->存放在components目录
2、路由组件
这类组件是点击路由连接跳转以后显示的组件---->存放在views目录

4、路由的嵌套

一个路由中又包含其他路由地址,就称为:‘嵌套路由’

image-20230524125339826

修改路由规则

/导入home二级组件
import news from '../views/news'
import help from '../views/help'export default new VueRouter({//指定路由规则routes: [{//请求地址是/home;配置一级路由时需要在名称前加/path: "/home",//在路由展示区中显示哪一个组件component: home,//配置home下面的二级路由children: [{//二级路由,一般不要加///访问地址:/home/newspath: 'news',component: news},{//访问地址:/home/helppath: 'help',component: help},]},{//请求地址是/aboutpath: "/about",//在路由展示区中显示哪一个组件component: about},]
})

5、路由传递Query参数

1、拼接参数传递
在路由地址中拼接参数
1、传递参数	<router-link :to="`/home/news/newsShow?id=${k.id}&title=${k.title}`">		{{ k.title }}</router-link>2、获取传递的参数{{$router.query.参数名}}{{$router.query.id}}
2、路由传递对象
  <router-link :to="{//指定请求路径path:'/home/news/newsShow',//指定要传递的参数query:{id:k.id,title:k.title}}">{{ k.title }}</router-link>//获取{{$router.query.id}}

6、简化路由

1、命名路由
特点:给路由指定别名,访问时,直接访问别名即可,不用指定完整路由地址

给路由起别名

在index.js修改代码{//路由名称name: "about",//请求地址是/aboutpath: "/about",//在路由展示区中显示哪一个组件component: about},

访问别名

/传递值<router-link:to="{//直接访问路由别名即可name:'about',query:{id:k.id,title:k.title}}">{{ k.title }}</router-link>/不传值 //同样只访问别名<router-link :to="{name:'about'}">{{ k.title }}</router-link>

7、parms传递参数

route路由中传递参数有两种形式:

1、使用jquery传递参数:to="xxx/xx?参数名1=值1&参数名2=值2":to="/home/news?id=11&name==zs"2、使用parms传递参数:to="xxx/xx/参数1/参数2":to="/home/news/11/zs"
1、拼接字符串传递
1、首先在route/index.js文件中指定路由时,设置占位符{//使用params传递参数//路由名称name: "helpShow",path: 'helpShow/:id/:title',component: helpShow,//组件名称}2、传递参数a、传递字符串<router-link :to="`/home/help/helpShow/${k.id}/${k.title}`">{{ k.title }}</router-link>b、传递对象(必须采用命名路由访问)<router-link:to="{name:'helpShow',params:{id:k.id,title:k.title}}">{{ k.title }}</router-link>3、取参数{{ $route.params.title}}

8、路由缓存

默认情况下,使用vue路由时,当组件切换时,不显示的组件默认会被销毁掉,当再次显示时,该组件会重新创建
【问题:】这样就会导致之前组件上的数据全部丢失
【解决:】进行组件的缓存,我们只需要在视图展示区中,设置哪些组件不用销毁

【解决1:所有组件都不销毁】

    <!-- //设置缓存 --><keep-alive><router-view></router-view></keep-alive>//此代码表示,该展示区的所有组件都不会销毁

【解决2:指定组件不销毁】

       //include="组件的名称"<keep-alive include="NeWS"><router-view></router-view></keep-alive>

【解决3:指定多个组件不被销毁】

       <keep-alive include="['NeWS','help']"><router-view></router-view></keep-alive>

第十一章

vue中的路由守卫

elementUI

综合应用

1、vue中的路由守卫

什么是路由守卫
作用:主要是对路由进行权限控制,如果身份满足设置的要求就允许继续访问路由的组件,否则不执行对应的路由请求//就相当于判断用户是否登录,只有登录了才能看
路由守卫的分类
1、全局路由守卫2、独享路由守卫3、组件内守卫

2、配置全局路由守卫

1、前置路由守卫
它是在路由到对应的组件之前进行请求拦截

步骤:

1、修改index.js文件//不要直接暴露const router = new VueRouter({....})// 此处配置路由守卫//to:准备去哪个组件 from:从哪个组件发出请求的  next 是否继续向下运行router.beforeEach((to, from, next) => {console.log("哪来的", from);console.log("准备去哪", to);next();//此方法执行,路由才会跳转,否则不会跳转})//暴露路由器export default router;2、向localstorage存个值(模拟用户信息)//存值:user  aj3、设置拦范围	router.beforeEach((to, from, next) => {a、拦截访问所有组件的请求,必须登录才能查看var user = localStorage.getItem('user');if (user == null) {alert("请登录")return;}//b、拦截访问指定组件的请求//先判断用户是否访问news组件,如果要访问该组件就进行身份验证if (to.path == '/home/news') {//判断用户是否登录if (localStorage.getItem('user') == null) {alert("请登录")return;}}//放行next();
})
组件的跳转
1、在一个组件中通过函数的方式实现路由跳转this.$router.push('/请求地址')this.$router.push({name:"组件名称"})
2、在路由文件index.js中进行编程式跳转router.push('/请求地址')
2、后置路由守卫
不常见没讲

3、vue UI的命令生成vue项目结构

ui:user interface
1、在项目cmd输入--->vue ui2、在localhost:8000界面中生成项目结构3、将生成的项目结构在vscode中打开,增加功能即

4、Element UI

1、安装组件  npm i element-ui -S2、在main.js中引入UIimport ElementUI from 'element-ui';import 'element-ui/lib/theme-chalk/index.css';Vue.use(ElementUI);3、好了 可以开始cv了

5、用户管理系统

image-20230525201152470

1、头部组件
<template><divstyle="line-height:50px;height:50px;    background-color: #545c64;;border-bottom:1px solid #ccc;display:flex"><div style="width:200px;color:#1989fa;;font-weight:bold;margin-left:10px">后台管理系统</div><div style="flex:1">11</div><div style="width:200px"><el-col :span="12"><el-dropdown><span class="el-dropdown-link">用户信息<i class="el-icon-arrow-down el-icon--right"></i></span><el-dropdown-menu slot="dropdown"><el-dropdown-item icon="el-icon-circle-plus">新建模块</el-dropdown-item><el-dropdown-item icon="el-icon-user">个人信息</el-dropdown-item><el-dropdown-item icon="el-icon-s-tools">系统设置</el-dropdown-item><el-dropdown-item icon="el-icon-switch-button">退出登录</el-dropdown-item></el-dropdown-menu></el-dropdown></el-col></div></div>
</template>
2、主体区域
1、左边导航
<template><div><el-col :span="12"><el-menudefault-active="1-1-1"class="el-menu-vertical-demo"@open="handleOpen"style="width:200px;min-height:calc(100vh - 50px)"@close="handleClose"background-color="#545c64"text-color="#fff"active-text-color="#409EFF"><el-submenu index="1"><template slot="title"><i class="el-icon-location"></i><span>学生管理系统</span></template><el-submenu index="1-1"><template slot="title">学员管理</template><el-menu-item index="1-1-1">学员查询</el-menu-item><el-menu-item index="1-1-2">成绩查询</el-menu-item></el-submenu><el-submenu index="1-2"><template slot="title">班级管理</template><el-menu-item index="1-2-1">班级查询</el-menu-item></el-submenu></el-submenu><el-menu-item index="2"><i class="el-icon-menu"></i><span slot="title">课程管理</span></el-menu-item><el-menu-item index="3"><i class="el-icon-document"></i><span slot="title">后勤管理</span></el-menu-item><el-menu-item index="4"><i class="el-icon-setting"></i><span slot="title">部门管理</span></el-menu-item></el-menu></el-col></div>
</template>
2、右边展示区
<template><!-- 功能按钮 --><div><el-row style="margin:5px"><el-button type="primary">添加</el-button><el-button type="success">导入</el-button><el-button type="warning">导出</el-button></el-row><!-- 搜索按钮 --><div style="width:300px;margin:8px"><el-inputtype="text"style="width:200px"placeholder="请输入内容"v-model="text"maxlength="10"show-word-limit></el-input><el-button style="margin-left:5px" type="primary">查询</el-button></div><!-- 表格部分 --><el-table:data="tableData"borderstyle="width: 100%"height="250":default-sort="{prop: 'bir', order: 'descending'}"><el-table-column type="index" sortable label="编号" align="center" width="180"></el-table-column><el-table-column prop="name" sortable label="姓名" width="180" align="center"></el-table-column><el-table-column prop="clazz" sortable label="班级" width="180" align="center"></el-table-column><el-table-column prop="gender" sortable label="性别" width="180" align="center"></el-table-column><el-table-column prop="score" sortable label="成绩" width="180" align="center"></el-table-column><el-table-column prop="bir" sortable label="出生日期" width="180" align="center"></el-table-column><el-table-column label="操作" width="237" align="center"><template slot-scope="scope"><el-button @click="handleClick(scope.row)" type="primary" plain size="small">编辑</el-button><el-button type="danger" plain size="small">删除</el-button></template></el-table-column></el-table></div>
</template>

根据考核结果显示优秀良好及格

      <el-table-column label="考核结果" align="center" width="180"><template slot-scope="scope"><el-popover trigger="hover" placement="top"><p>姓名: {{ scope.row.name }}</p><!-- <p>考试时间: {{ scope.row.address }}</p> --><div slot="reference" class="name-wrapper"><el-tagsize="medium"type="success"v-if="scope.row.score>=90&&scope.row.score<=100">优秀</el-tag><el-tag size="medium" v-if="scope.row.score>=80&&scope.row.score<90">良好</el-tag><el-tag size="medium" type="warning" v-if="scope.row.score>=60&&scope.row.score<80">及格</el-tag><el-tag size="medium" type="danger" v-if="scope.row.score<60&&scope.row.score>=0">不及格</el-tag></div></el-popover></template>

第十二章

后台管理系统(elementUI)

1、与后台交互
1、安装axiosnpm i axios2、在home中引用axiosimport axios from "axios";3、编写函数用于发送ajax请求methods:{init(){..			}},
2、分页后序号连续显示
  <el-table-column type='index' sortable label="编号" align="center" width="140"></el-table-column>//这样写有个问题,因为一旦分页之后,新的页面又会从1开始,我们需要让它连续显示

解决

      <el-table-column sortable label="编号" align="center" width="140"><template slot-scope="scope"><b>{{ scope.$index+(currentPage-1)*pageSize+1 }}</b></template></el-table-column>//手动计算翻页后从几开始
3、往后台传递日期
        <el-form-item label="生日" label-width="80px"><div class="block"><el-date-pickerstyle="width:80%"v-model="form.bir"align="right"type="date"value-format="yyyy-MM-dd"placeholder="选择日期":picker-options="pickerOptions"></el-date-picker></div></el-form-item></el-form>//加一个     value-format="yyyy-MM-dd"
4、路由重定向
    //路由地址path: '/',name: "myLayout",//如果没有指定具体的地址,就重定向login组件上redirect:"login",component: myLayout,
5、路由跳转
this.$router.push({ path: "/home" });//通过地址栏跳转
//window.location.href = "http://localhost:8080/login";
6、localStorage与sessionStorage
相同点:他们都是在客户端浏览器中存放用户数据,他们的方法完全一样存:localStorage.setItem('名称',值);sessionStorage.setItem('名称',值);取:var msg=localStorage.getItem("名称")var msg=sessionStorage.getItem("名称")
不同点:存放在localStorag中的数据永久有效,只有不清空浏览器数据,它将一直存在存放在sessionStorage的数据,只要当前浏览器关闭,数据就会丢失

align=“center”>






<el-button @click=“handleClick(scope.row)” type=“primary” plain size=“small”>编辑
删除


```

根据考核结果显示优秀良好及格

      <el-table-column label="考核结果" align="center" width="180"><template slot-scope="scope"><el-popover trigger="hover" placement="top"><p>姓名: {{ scope.row.name }}</p><!-- <p>考试时间: {{ scope.row.address }}</p> --><div slot="reference" class="name-wrapper"><el-tagsize="medium"type="success"v-if="scope.row.score>=90&&scope.row.score<=100">优秀</el-tag><el-tag size="medium" v-if="scope.row.score>=80&&scope.row.score<90">良好</el-tag><el-tag size="medium" type="warning" v-if="scope.row.score>=60&&scope.row.score<80">及格</el-tag><el-tag size="medium" type="danger" v-if="scope.row.score<60&&scope.row.score>=0">不及格</el-tag></div></el-popover></template>

第十二章

后台管理系统(elementUI)

1、与后台交互
1、安装axiosnpm i axios2、在home中引用axiosimport axios from "axios";3、编写函数用于发送ajax请求methods:{init(){..			}},
2、分页后序号连续显示
  <el-table-column type='index' sortable label="编号" align="center" width="140"></el-table-column>//这样写有个问题,因为一旦分页之后,新的页面又会从1开始,我们需要让它连续显示

解决

      <el-table-column sortable label="编号" align="center" width="140"><template slot-scope="scope"><b>{{ scope.$index+(currentPage-1)*pageSize+1 }}</b></template></el-table-column>//手动计算翻页后从几开始
3、往后台传递日期
        <el-form-item label="生日" label-width="80px"><div class="block"><el-date-pickerstyle="width:80%"v-model="form.bir"align="right"type="date"value-format="yyyy-MM-dd"placeholder="选择日期":picker-options="pickerOptions"></el-date-picker></div></el-form-item></el-form>//加一个     value-format="yyyy-MM-dd"
4、路由重定向
    //路由地址path: '/',name: "myLayout",//如果没有指定具体的地址,就重定向login组件上redirect:"login",component: myLayout,
5、路由跳转
this.$router.push({ path: "/home" });//通过地址栏跳转
//window.location.href = "http://localhost:8080/login";
6、localStorage与sessionStorage
相同点:他们都是在客户端浏览器中存放用户数据,他们的方法完全一样存:localStorage.setItem('名称',值);sessionStorage.setItem('名称',值);取:var msg=localStorage.getItem("名称")var msg=sessionStorage.getItem("名称")
不同点:存放在localStorag中的数据永久有效,只有不清空浏览器数据,它将一直存在存放在sessionStorage的数据,只要当前浏览器关闭,数据就会丢失

http://www.ppmy.cn/server/27666.html

相关文章

Flutter笔记:DefaultTextStyle和DefaultTextHeightBehavior解读

Flutter笔记 DefaultTextStyle和DefaultTextHeightBehavior解读 - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 291148484163.com. Shenzhen ChinaAddress of this article:htt…

018、Python+fastapi,第一个Python项目走向第18步:ubuntu24.04 安装cuda和pytorch环境

一、说明 我们安装了pytorch环境之后&#xff0c;会用yolo v9 来测试一下&#xff0c;看8g 显存能不能跑下来&#xff0c;上次用无影云电脑&#xff0c;4cpu8g内存直接爆了&#xff0c;云电脑也死机了&#xff0c;提示一直占用内存不释放&#xff0c;我自己的云电脑不能占用内…

HarmonyOS 应用开发——入门

首先当然是华为的官方文档了&#xff0c;要认真学习: https://developer.huawei.com/consumer/cn/doc/harmonyos-guides-V2/start-overview-0000001478061421-V2 不想花时间看&#xff0c;可以看我下面总结的干货&#xff0c;哈哈 第一个问题&#xff1a;stage架构和fa架构的区…

在Centos7上部署LDAP服务

安装ldap和设置自起 - 安装ldap yum install -y openldap-servers openldap-clients openldap openldap-devel compat-openldap openldap-servers-sql- 启动和开机自起 systemctl start slapd systemctl enable slapd- 查看服务是否安装成功 配置ldap - 创建第一个管理账号…

02 spring-boot+mybatis+elementui 的登录,文件上传,增删改查的入门级项目

前言 主要是来自于 朋友的需求 项目概况 就是一个 学生信息的增删改查 然后 具体到业务这边 使用 mybatis xml 来配置的增删改查 后端这边 springboot mybatis mysql fastjson hutool 的一个基础的增删改查的学习项目, 简单容易上手 前端这边 node14 vue element…

PotatoPie 4.0 实验教程(32) —— FPGA实现摄像头图像浮雕效果

什么是浮雕效果&#xff1f; 浮雕效果是一种图像处理技术&#xff0c;用于将图像转换为看起来像浮雕一样的效果&#xff0c;给人一种凸起或凹陷的立体感觉&#xff0c;下面第二张图就是图像处理实现浮雕效果。 不过这个图是用Adobe公司的PS人工P图实现的&#xff0c;效果比较…

6、FreeCAD的设计

一、FreeCAD的模块化设计&#xff08;插件系统&#xff09; 模块化设计是成功的软件架构的关键设计原则。FreeCAD采用了与Salome平台相似的模块化结构&#xff0c;后者是一个开源的CAE平台&#xff0c;包含几何建模、网格划分、FEM和CFD求解器模块。FreeCAD拥有生成新模块的基…

【工程记录】Python爬虫入门记录(Requests BeautifulSoup)

目录 写在前面1. 环境配置2. 获取网页数据3. 解析网页数据4. 提取所需数据4.1 简单提取4.2 多级索引提取 5. 常见问题 写在前面 仅作个人学习与记录用。主要整理使用Requests和BeautifulSoup库的简单爬虫方法。在进行数据爬取时&#xff0c;请确保遵守相关法律法规和网站的服务…