Vue2进阶

1.el安装

官网地址

Element - The world's most popular Vue UI frameworkElement,一套为开发者、设计师和产品经理准备的基于 Vue 2.0 的桌面端组件库icon-default.png?t=O83Ahttps://element.eleme.cn/#/zh-CN 安装

npm install element-ui -S

引入组件(在 main.js)中

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'Vue.use(ElementUI)

测试

<el-button>我是按钮</el-button>

2.表格el-table

代码示例

<template><div><el-table :data="students" stripe style="width: 100%"><el-table-column prop="id" label="学号" width="180"> </el-table-column><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column prop="age" label="年龄" width="180"> </el-table-column><el-table-column prop="gender" label="性别" width="180"> </el-table-column></el-table></div>
</template><script>
import axios from "axios";
const options = {data() {return {students: [],};},methods: {async sendReq() {const resp = await axios.get("/api/student");console.log(resp.data);this.students = resp.data;},},mounted() {this.sendReq();},
};export default options;
</script><style scoped></style>

3.分页el-pagination

代码示例

<template><div><el-table :data="students" stripe style="width: 100%"><el-table-column prop="id" label="学号" width="180"> </el-table-column><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column prop="age" label="年龄" width="180"> </el-table-column><el-table-column prop="gender" label="性别" width="180"></el-table-column></el-table><el-paginationbackground:total="total":page-size="queryDto.size":current-page="queryDto.page":page-sizes="[3, 5, 10, 20]"@size-change="sizeChange"@current-change="currentChange"layout="prev, pager, next, sizes, jumper,total"></el-pagination></div>
</template><script>
import axios from "axios";
const options = {data() {return {students: [],total: 0,queryDto: {page: 1,size: 3,}};},methods: {async sendReq() {const resp = await axios.get("/api/student");console.log(resp.data.students);console.log(resp.data.total);this.students = resp.data.students;this.total = resp.data.total;},async sizeChange(size) {this.queryDto.size = size;this.sendReq()},async currentChange(page) {this.queryDto.page = page;this.sendReq()}},mounted() {this.sendReq();},
};export default options;
</script><style scoped>
</style>

4.搜索el-search

<template><div><el-inputv-model="queryDto.name"placeholder="请输入内容"width="30px"></el-input><el-select v-model="queryDto.gender" placeholder="请选择"><el-option value="男"> </el-option><el-option value="女"> </el-option></el-select><el-table :data="students" stripe style="width: 100%"><el-table-column prop="id" label="学号" width="180"> </el-table-column><el-table-column prop="name" label="姓名" width="180"> </el-table-column><el-table-column prop="age" label="年龄" width="180"> </el-table-column><el-table-column prop="gender" label="性别" width="180"></el-table-column></el-table><el-button type="primary" @click="sendReq()">查询</el-button><el-paginationbackground:total="total":page-size="queryDto.size":current-page="queryDto.page":page-sizes="[3, 5, 10, 20]"@size-change="sizeChange"@current-change="currentChange"layout="prev, pager, next, sizes, jumper,total"></el-pagination></div>
</template><script>
import axios from "axios";
const options = {data() {return {students: [],total: 0,queryDto: {name: "",gender: "",page: 1,size: 3,},};},methods: {async sendReq() {const resp = await axios.get("/api/student");console.log(resp.data.students);console.log(resp.data.total);this.students = resp.data.students;this.total = resp.data.total;},async sizeChange(size) {this.queryDto.size = size;this.sendReq();},async currentChange(page) {this.queryDto.page = page;this.sendReq();},},mounted() {this.sendReq();},
};export default options;
</script><style scoped>
.el-input {width: 200px;margin-right: 10px;
}
</style>

5.级联展示el-cascader

示例

假设数据结构如下:

  • 省份 -> 城市 -> 区县

后台代码示例

public class CascadingData {private String label;private String value;private List<CascadingData> children;// Constructors, Getters, and Setters
}
@RestController
@RequestMapping("/api/cascading")
public class CascadingController {@GetMapping("/data")public List<CascadingData> getCascadingData() {List<CascadingData> provinces = new ArrayList<>();// 示例数据CascadingData province = new CascadingData("Province1", "province1", new ArrayList<>());CascadingData city = new CascadingData("City1", "city1", new ArrayList<>());city.getChildren().add(new CascadingData("County1", "county1", null));province.getChildren().add(city);provinces.add(province);return provinces;}
}

前端代码示例

<template><div><el-cascaderv-model="selectedValue":options="cascadingOptions"placeholder="请选择"/></div>
</template><script>
import axios from 'axios';export default {data() {return {cascadingOptions: [],selectedValue: null,};},mounted() {this.fetchCascadingData();},methods: {fetchCascadingData() {axios.get('/api/cascading/data').then(response => {this.cascadingOptions = response.data;});}}
};
</script>

6.router-路由配置

vue属于单页面应用,所谓的路由,就是根据浏览器路径不同,用不同的视图组件替换这个页面内容。

使用示例

先建立三个要跳转的页面视图

在根组件视图,添加路由跳转标签

在路由的index.js中配置跳转规则

这样就可以通过访问不同的路径,跳转不同的页面视图

7.router-动态导入

当打包构建应用时,JavaScript包会变得非常大,影响页面加载。如果我们能把不同路由对应的组件分割成不同的代码块,然后当路由被访问的时候才加载对应组件,这样就更加高效。

代码示例

8.router-嵌套路由

在一个页面中,有多个子页面

示例

9.router-路由跳转

Main区域的视图可以根据路由进行跳转展示

代码示例

<template><div><el-container><el-header>这是页面头部导航栏</el-header><el-container><el-aside width="200px"><router-link to="/c1">C1页面</router-link><br><router-link to="/c2">C2页面</router-link><br><router-link to="/c3">C3页面</router-link><br></el-aside><el-main><router-view></router-view></el-main></el-container></el-container></div>
</template>

10.router-导航菜单

通过点击导航菜单,在Main区域进行不同页面间的切换

<template><div><el-container><el-header>这是页面头部导航栏</el-header><el-container><el-aside width="200px"><el-menudefault-active="2"class="el-menu-vertical-demo"background-color="#545c64"text-color="#fff"active-text-color="#ffd04b"router><el-menu-item index="/c1"><i class="el-icon-menu"></i><span slot="title">导航一</span></el-menu-item><el-menu-item index="/c2"><i class="el-icon-menu"></i><span slot="title">导航二</span></el-menu-item><el-menu-item index="/c3"><i class="el-icon-document"></i><span slot="title">导航三</span></el-menu-item></el-menu></el-aside><el-main><router-view></router-view></el-main></el-container></el-container></div>
</template>

11.router-动态路由

 不同的用户登录,后台根据用户的角色返回这个用户能够访问的菜单信息。

思路,用户登录之后,后台返回该用户能够访问的菜单地址,前端接收到响应数据之后,通过 this.$router.addRoute()方法,将返回的路由挂载到指定的父路由上。

12.router-重置路由

上面的代码会有个问题,就是你切换路由的时候,不会恢复成初始状态,如果先是管理员登录,那么后面所有的用户登录都是和管理员一样拥有全部的路由权限。

解决方式,在每次登录之前先重置路由,然后再去访问后端,获取现在登录用户的访问权限。

# 在路由管理视图中添加
export function resetRouter() {router.matcher = new VueRouter({routes}).matcher
}

13.router-页面刷新

 用户登录之后,不注销,但是如果刷新了页面,权限菜单就会丢失,需要重新向后台发起请求。

解决方法,登录之后,将用户的权限菜单信息放入到 sessionStorage 中,只有在关闭标签页中,信息才会被清除。

存入

取出

14.响应式数据共享 - vuex

这种取数据的方式我们可以进一步优化,放在同一个页面多个地方使用到这个值。

通过计算属性

但是这样写,还有一个问题,就是如果属性值很多(name, age, sex......),那么计算属性里面就要写很多的重复代码。

解决方法,vuex提供了mapState方法

取数据的时候 vuex 做了优化,存数据的时候同样 vuex 也做了优化。

使用 mapMutations 的时候有一个问题,就是在其中不能包含异步操作,如请求后台数据,会造成开发工具不准确。

如果是想通过请求后台获得响应数据之后存入 store 中,需要经过 mapAction 转发一层。

mapActions 调用

总结,能立刻获取到的数据使用 mapMutations ,不是立刻获取到的数据使用 mapActions。

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

如若内容造成侵权/违法违规/事实不符,请联系一条长河网进行投诉反馈,一经查实,立即删除!

相关文章

案例:三次锁定(下)

第二步: 在 Form1.cs 中完成以下代码 using Dome16_三次锁定.service; using Dome16_三次锁定.service.serviceimpl; using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using Sys…

前端学习笔记—Vue3特性

一、 Vue3与Vite构建工具简介 image.png image.png image.png image.png Vite构建工具&#xff08;其他的打包工具有webpack&#xff0c;grunt&#xff0c;gulp&#xff09; image.png image.png 构建 二、创建Vue3项目 vite在TypeScript结合使用上&#xff0c;直接开箱即用&am…

iOS 去掉URL里面的百分号符号

遇到这个一段字符串 “publicId2030095197043302&publicBizTypeCONTENT_USER&chInfoch_life__chsub_Ndiscovery.featured&logoUrlhttps%3A%2F%2Fmdn.alipayobjects.com%2Fopen_content%2Fafts%2Fimg%2FA*_SUKQodfigcAAAAAAAAAAAAAfVx1AQ%2Foriginal&publicName…

node.js安装配置(Windows)

1、下载 CNPM Binaries Mirror 2、安装 3、验证 win R 进入cmd 4、配置环境变量 4.1、创建两个文件夹 4.2、安装目录进入cmd(配置全局属性) 配置两个命令&#xff1a; npm config set prefix "D:\liyunqing\nodejs\node_global"npm config set cache "D:\l…

jdbc中预防SQL攻击

目录 展示SQL攻击 举一个出现sql 攻击的例子 SQL攻击的原因 分析原因 阻止SQL攻击 PreparedStatement的含义 使用PreparedStatement的原因 步骤如下 注意 总结 展示SQL攻击 举一个出现sql 攻击的例子 假设我们在做登录业务时&#xff0c;思路是这样的&#xff1a; 首…

30.1 时序数据库TSDB的典型特点

本节重点介绍 : db-ranking网站对db进行排名时序数据特点时序数据库特点时序数据库遇到的挑战开源时间序列数据库 db-ranking 一个神奇的网站 https://db-engines.com/en/ranking 时序数据ranking https://db-engines.com/en/ranking/timeseriesdbms 排名方法 https://db-en…

14:00面试,14:06就出来了,问的问题过于变态了。。。

我从一家小公司转投到另一家公司&#xff0c;期待着新的工作环境和机会。然而&#xff0c;新公司的加班文化让我有些始料未及。虽然薪资相对较高&#xff0c;但长时间的工作和缺乏休息使我身心俱疲。 就在我逐渐适应这种高强度的工作节奏时&#xff0c;公司突然宣布了一则令人…

架构师之路-学渣到学霸历程-49

实现不同终端的跳转实验 今天分享一下&#xff1a; nginx的跳转&#xff1a;主要看你的访问是手机还是网页&#xff1b;于是就有这个跳转的功能&#xff1b; 1、基础的环境部署 安装好nginx&#xff08;这里最好的就是干净的环境&#xff09;创建两个server&#xff1b;用于…

RK3568笔记1:BootRom

BootRom是瑞芯微公司在生产的CPU时&#xff0c;存储在内部flash中的一段固件代码&#xff0c;用于初始化硬件和启动系统。 RK3568 处理器也具备 BootROM。这是存储在处理器内部的只读存储器 (ROM) 中的一段代码&#xff0c;通常是不可修改的&#xff0c;其主要功能是在设备加电…

DataWind将字符串数组拆出多行的方法

摘要&#xff1a; 可视化建模中先将字符串split为array再用explode(array)即可 可视化建模 进入“可视化建模”页面 1.1 新建任务 如果团队内没有可视化建模任务。请点击“新建任务”&#xff0c;输入名称并确定。 1.2 建立数据连接 在左边栏中选择“数据连接”&#xff0c…

2024年【电工(中级)】考试及电工(中级)考试报名

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 电工&#xff08;中级&#xff09;考试参考答案及电工&#xff08;中级&#xff09;考试试题解析是安全生产模拟考试一点通题库老师及电工&#xff08;中级&#xff09;操作证已考过的学员汇总&#xff0c;相对有效帮…

【韩老师零基础30天学会Java】02章

sublime Text中本身没有GBK编码&#xff0c;需要安装 要在sublime Text中设置编码为GBK&#xff0c;请按照以下步骤操作 打开Sublime Text编辑器,点击菜单栏中的“Preferences”(首选项)选项&#xff0c;找打Package Control选项。点击Package Control&#xff0c;随后搜索Inst…

Pytorch实现运动鞋识别

Pytorch实现运动鞋识别 &#x1f368; 本文为&#x1f517;365天深度学习训练营 中的学习记录博客 &#x1f356; 原作者&#xff1a;K同学啊 电脑系统&#xff1a;Windows11 显卡型号&#xff1a;NVIDIA Quadro P620 语言环境&#xff1a;python 3.9.7 编译器&#xff1a;j…

老年人跌倒智能检测系统

项目源码获取方式见文章末尾&#xff01; 600多个深度学习项目资料&#xff0c;快来加入社群一起学习吧。 《------往期经典推荐------》 项目名称 1.【基于CNN-RNN的影像报告生成】 2.【卫星图像道路检测DeepLabV3Plus模型】 3.【GAN模型实现二次元头像生成】 4.【CNN模型实现…

Spring Boot原理全解析:如何让开发更轻松高效(二)-起步依赖、自动装配

通过这篇博客&#xff0c;读者将能够掌握 Spring Boot 中的配置优先级和 Bean 管理的核心原理&#xff0c;为开发更加高效、可维护的 Spring Boot 应用打下坚实的基础。 目录 前言 起步依赖 自动配置 概述 常见方案 概述 方案一 方案二 总结 前言 通过这篇博客&#xf…

测试实项中的偶必现难测bug--短信触发H5拒绝行为

问题描述: 企业邀请其他人加入团队,发送邀请短信给对方,对方通过短信链接跳转到H5页面,输入手机后,点击发送验证码,前提是短信通知验证弹窗需要打开,收到短信验证码后,点击一键代入,会触发拒绝加入行为。 需求: 由于我们的邀请链接是一次性的,一旦有用户确认加入或…

PVE纵览-PVE与VM:谁才是你的最佳虚拟化选择?

PVE纵览-PVE与VM&#xff1a;谁才是你的最佳虚拟化选择&#xff1f; 文章目录 PVE纵览-PVE与VM&#xff1a;谁才是你的最佳虚拟化选择&#xff1f;摘要1 不同虚拟化平台的基础2 平台特性与功能3 性能与可靠性4 成本与经济性5 应用场景比较6 用户体验与支持7 结论与建议 关键字&…

陪诊问诊APP开发实战:基于互联网医院系统源码的搭建详解

时下&#xff0c;开发一款功能全面、用户体验良好的陪诊问诊APP成为了医疗行业的一大热点。本文将结合互联网医院系统源码&#xff0c;详细解析陪诊问诊APP的开发过程&#xff0c;为开发者提供实用的开发方案与技术指导。 一、陪诊问诊APP的背景与功能需求 陪诊问诊APP核心目…

post sim下如何将timing信息反标到仿真工具

文章目录 0 前言1 调用格式2 option介绍2.1 sdf_file (**必须**)2.2 module_instance (**可选**)2.3 config_file (**可选**)2.4 log_file (**可选**)2.5 mtm_spec (**可选**)2.6 scale_factors (**可选**)2.7 scale_type (**可选**) 0 前言 跑post sim时需要带入timing信息&a…

C++builder中的人工智能(16):神经网络中的SoftPlus激活函数

现在我们继续探索一下SoftPlus激活函数在人工神经网络&#xff08;ANN&#xff09;中的应用。了解SoftPlus激活函数的工作原理&#xff0c;将有助于您在使用C IDE构建C应用程序时更加得心应手。 目录 神经网络中的激活函数是什么&#xff1f;能在C中创建激活函数吗&#xff1f…