ElementUI基本介绍及登录注册案例演示

目录

前言

一.简介

二.优缺点

三.Element完成登录注册

1. 环境配置及前端演示

1.1 安装Element-UI模块

1.2 安装axios和qs(发送get请求和post请求)

1.3 导入依赖

2 页面布局

2.1组件与界面

3.方法实现功能数据交互

3.1 通过方法进行页面跳转

 3.2 axios发送get请求

3.2 对后端发送登录请求效果演示 

4.导入接口管理模块,将vue实例和配置进行挂载

4.1在api包中配置所有接口地址

4.2 将所有所需要的模块进行统一管理

5.前后端分离实现注册

5.1前端模板

5.2 接口定义的方法

 5.3 后端进行实现接口

5.4 Controller层方法

 5.5 前端向后端发起请求

5.6 效果演示

四.跨域问题


前言

Element UI 是一个基于 Vue.js 的开源前端框架,用于构建用户界面。它提供了一套丰富的 UI 组件和工具,可以帮助开发者快速构建现代化的 web 应用程序。

一.简介

  1. 基于 Vue.js:Element UI 是专门为 Vue.js 框架设计的,因此与 Vue.js 集成非常紧密。这使得开发者可以轻松地将 Element UI 的组件嵌入到他们的 Vue.js 应用程序中。

  2. 丰富的 UI 组件:Element UI 提供了一系列常用的 UI 组件,包括按钮、表单、对话框、导航菜单、数据表格、图表等等。这些组件具有现代化的外观和丰富的功能,能够满足各种应用程序的需求。

  3. 响应式设计:Element UI 的组件都是响应式的,可以适应不同屏幕尺寸和设备类型。这有助于开发者构建适用于桌面和移动设备的应用程序。

  4. 主题定制:Element UI 允许开发者根据自己的需求定制主题,以满足应用程序的视觉风格要求。你可以轻松地修改颜色、字体和其他样式属性。

  5. 国际化支持:Element UI 提供了多语言和国际化支持,可以轻松地将你的应用程序本地化到不同的语言和地区。

  6. 活跃的社区:Element UI 拥有一个庞大的开发和用户社区,因此你可以轻松地找到有关使用和解决问题的支持和资源。

  7. 文档和示例:Element UI 提供了详细的官方文档和示例,帮助开发者快速上手和了解如何使用不同的组件和功能。

总的来说,Element UI 是一个强大的前端框架,特别适用于构建 Vue.js 应用程序的用户界面。它的丰富组件库、响应式设计和易于定制的主题使其成为开发者的首选之一,用于创建现代化的 Web 应用程序

官网

Element - 网站快速成型工具

二.优缺点

优点:

  1. 易于学习和使用:Element UI 的文档清晰,使用简单,使得初学者可以快速上手。

  2. 丰富的组件库:提供了丰富的 UI 组件,可以减少开发时间,加速项目开发。

  3. Vue.js 集成:与 Vue.js 紧密集成,使得在 Vue.js 项目中使用 Element UI 非常方便。

  4. 活跃的社区支持:有一个庞大的开发者社区,可以获得各种问题的解决方案和技术支持。

  5. 主题定制:允许定制主题,以满足不同项目的视觉需求。

缺点:

  1. 体积较大:由于提供了大量组件和功能,Element UI 的库文件相对较大,可能会影响应用程序的加载时间。

  2. 定制复杂性:虽然可以定制主题,但有时可能需要深入了解 CSS 和主题定制的细节,这对于不熟悉前端开发的人可能有一定的学习曲线。

  3. 依赖于 Vue.js:虽然 Element UI 的与 Vue.js 集成是其优势之一,但如果你的项目不使用 Vue.js,那么它可能不太适用。

总的来说,Element UI 是一个功能强大、易于学习和使用的前端框架,特别适用于基于 Vue.js 的项目。然而,开发者需要权衡其体积和定制复杂性,以确定是否适合他们的特定项目需求

三.Element完成登录注册

1. 环境配置及前端演示

1.1 安装Element-UI模块

在终端执行以下命令进行下载

npm install element-ui -S

当我们下载完成后可以在目录static/package.json下面的dependencies中找到

1.2 安装axios和qs(发送get请求和post请求)

npm i axios -S

 npm i qs -S

1.3 导入依赖

// 新添加1
import ElementUI from 'element-ui' 
// 新添加2,避免后期打包样式不同,要放在import App from './App';之前
import 'element-ui/lib/theme-chalk/index.css' 

 将依赖导入项目的目录src/main.js文件中

注: 我们在导入依赖和样式的时候一定要放在import App from './App'之前

将Vue实例与element进行挂载

// 新添加3
Vue.use(ElementUI)   
Vue.config.productionTip = false

2 页面布局

2.1组件与界面

我们可以在Element官网上找到组件,寻找自己需要的组件,直接复制代码粘贴使用即可

 也可以根据上面提供的代码进行自定义修改获取自己的组件

当界面布局好后,我们也需要去配置好自己的路由

router/index.js中进行配置

export default new Router({routes: [{path: '/',name: 'HelloWorld',component: HelloWorld},{path: '/Login',name: 'Login',component: Login},{path: '/Register',name: 'Register',component: Register},]
})

当然,我们也需要进行导入视图界面

import Login from '@/view/Login.vue'
import Register from '@/view/Register.vue'

3.方法实现功能数据交互

3.1 通过方法进行页面跳转

(1)在组件上定义点击的方法

<el-link type="primary" @click="gotoRegister()">用户注册</el-link>

(2)在js代码的方法中进行定义

export default {name: 'Login',data () {return {msg: 'Welcome to Your Vue.js App'}},methods:{gotoRegister(){this.$router.push('/Register');}}
}

代码只演示了登录跳转注册,反之同理

演示效果

 3.2 axios发送get请求

(1)将后端项目运行

(2)将安装好的axios导入项目

  import axios from 'axios'

(3)前端编写方法向后端发送请求

doSubmit(){let url = "http://localhost:8080/user/userLogin";let params = {username:this.username,password:this.password};axios.get(url,{params:params}).then(r=>{if(r.data.success){this.$message({message: '登录成功',type: 'success'});}else{this.$message.error('登录失败,账号或密码错误');}}).catch(e=>{})}

注:发送请求之前需要在data值中定义好参数

data () {return {msg: 'Welcome to Your Vue.js App',username:"",password:""}}

3.2 对后端发送登录请求效果演示 

4.导入接口管理模块,将vue实例和配置进行挂载

4.1在api包中配置所有接口地址

在api包中定义action.js,配置接口地址

export default {'SERVER': 'http://localhost:8080/', //服务器'SYSTEM_USER_DOLOGIN': 'user/userLogin', //登陆'SYSTEM_USER_DOREG': '/userAction.action', //注册'getFullPath': k => { //获得请求的完整地址,用于mockjs测试时使用return this.SERVER + this[k];}
}

4.2 将所有所需要的模块进行统一管理

在api包中定义http.js,将所需模块全部放置统一进行管理全局配置

安装整合依赖

npm i vue-axios -S

将实例与全局配置进行挂载

在main.js中加入以下代码

import axios from '@/api/http'                 
import VueAxios from 'vue-axios' Vue.use(VueAxios,axios)

配置到这里我们可以节省上面之前写过的代码,在定义前端方法向后端发送请求中可以改为以下代码

doSubmit(){let url = this.axios.urls.SYSTEM_USER_DOLOGIN;let params = {username:this.username,password:this.password};this.axios.get(url,{params:params}).then(r=>{if(r.data.success){this.$message({message: '登录成功',type: 'success'});}else{this.$message.error('登录失败,账号或密码错误');}}).catch(e=>{})}

5.前后端分离实现注册

5.1前端模板

<template><div class="login-wrap"><el-form class="login-container"><h1 class="title">用户注册</h1><el-form-item label=""><el-input type="text" v-model="username" placeholder="注册账号" autocomplete="off"></el-input></el-form-item><el-form-item label=""><el-input type="password" v-model="password" placeholder="注册密码" autocomplete="off"></el-input></el-form-item><el-form-item><el-button type="primary" style="width:100%;" @click="doSubmit()">提交</el-button></el-form-item><el-row style="text-align: center;margin-top:-10px"><el-link type="primary">忘记密码</el-link><el-link type="primary" @click="gotoLogin()">用户登录</el-link></el-row></el-form></div>
</template>

5.2 接口定义的方法

int Register(User record);

 5.3 后端进行实现接口

@Overridepublic int Register(User record) {return userMapper.insertSelective(record);}

5.4 Controller层方法

 @RequestMapping("/userRegister")@ResponseBodypublic JsonResponseBody<?> userRegister(UserVo userVo, HttpServletResponse response){userVo.setId("10");int i = userService.Register(userVo);if(i>0){return new JsonResponseBody<>("用户注册成功!",true,0,null);}else{return new JsonResponseBody<>("用户注册失败!重新输入",false,0,null);}}

 5.5 前端向后端发起请求

export default {name: 'Register',data () {return {msg: 'Welcome to Your Vue.js App',username:"",password:""}},methods:{gotoLogin(){this.$router.push('/Login');},doSubmit(){let url = this.axios.urls.SYSTEM_USER_DOREG;let params = {username:this.username,password:this.password}this.axios.post(url,params).then(r=>{console.log(r)if(r.data.success){this.$message({message: '注册成功',type: 'success'});}else{this.$message.error('注册失败');}}).catch(e=>{})}}
}

5.6 效果演示

当注册完成后查看数据库,出现刚刚注册的用户时说明注册成功

 

四.跨域问题

跨域问题(Cross-Origin Resource Sharing,CORS)是一种 Web 安全性问题,涉及到在浏览器中进行跨域请求的限制和控制。跨域问题通常发生在以下情况下:

  1. 不同域名之间的请求: 当一个网页试图从与其自身不同域名的服务器请求数据时,浏览器会实施跨域策略。域名是由协议(如HTTP或HTTPS)、主机(如www.example.com)、端口(如80或443)和协议的组合(https://www.example.com:443)来定义的。

  2. 不同端口之间的请求: 即使在相同的域名下,如果请求的端口不同,也会被视为跨域请求。

  3. 不同协议之间的请求: 当网页从HTTP请求HTTPS或反之的情况下,也会发生跨域问题。

CORS 通过在服务器端和客户端之间定义一组 HTTP 头来控制跨域请求的行为。以下是 CORS 的一些关键概念和控制机制:

1. 原始请求和简单请求:

  • 原始请求(Simple Request): 如果满足一定条件,浏览器会允许跨域请求。这些条件包括使用的 HTTP 方法是一些安全方法(GET、HEAD、POST),只使用了一组安全的请求头(如Accept、Accept-Language、Content-Language、Content-Type,但仅限于 application/x-www-form-urlencoded、multipart/form-data 或 text/plain),以及没有使用自定义的请求头。

  • 非原始请求(Preflight Request): 如果请求不符合上述条件,浏览器会首先发送一个预检请求(Preflight Request),使用 OPTIONS 方法,并包含一组特殊的请求头,以获取服务器的授权。服务器必须响应这个预检请求并指定哪些域名、方法和头部是允许的。只有在预检请求得到批准后,浏览器才会发送实际的请求。

2. 服务器端配置:

服务器端需要配置允许来自其他域的请求。这通常通过设置响应头来完成,常见的响应头包括:

  • Access-Control-Allow-Origin: 指定允许访问资源的域名,可以是单个域名或使用通配符 * 表示允许任何域名访问。
  • Access-Control-Allow-Methods: 指定允许的 HTTP 方法。
  • Access-Control-Allow-Headers: 指定允许的请求头。
  • Access-Control-Allow-Credentials: 指定是否允许发送凭证信息(如Cookies)。
  • Access-Control-Expose-Headers: 指定哪些响应头可以暴露给客户端。

3. 跨域资源共享的安全性:

CORS 是一种有针对性的安全措施,它允许服务器有选择性地开放资源,以避免潜在的安全风险。如果服务器配置不当,可能会导致安全漏洞。因此,服务器端需要谨慎配置 CORS 头,以确保只有受信任的域名可以访问敏感资源。

总之,CORS 是一个重要的 Web 安全机制,用于控制跨域请求,以保护用户的隐私和数据安全。了解如何正确配置服务器和客户端以支持跨域请求对于 Web 开发至关重要。

httpResponse.setHeader("Access-Control-Allow-Origin", "*");// *,任何域名
httpResponse.setHeader("Access-Control-Allow-Headers", "responseType,Origin, X-Requested-With, Content-Type, Accept");
httpResponse.setHeader("Access-Control-Allow-Methods", "POST, GET, PUT, DELETE");

// Access-Control-Allow-Origin就是我们需要设置的域名

// Access-Control-Allow-Headers跨域允许包含的头。

// Access-Control-Allow-Methods是允许的请求方式 

今天的分享到这里就结束了,感谢各位大大的观看,各位大大的三连是博主更新的动力,感谢谢谢谢谢谢谢谢谢各位的支持!!!!! 

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

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

相关文章

Ubuntu性能分析-ftrace 底层驱动

1、框架介绍 ftrace内核驱动可以分为几部分:ftrace framework,RingBuffer,debugfs,Tracepoint,各种Tracer。 ftrace框架是整个ftrace功能的纽带,包括对内和的修改,Tracer的注册,RingBuffer的控制等等。 RingBuffer是静态动态ftrace的载体。 debugfs则提供了用户空间…

深度解读F5:从企业级负载均衡到云原生应用服务

上世纪九十年代&#xff0c;Internet 的快速发展催生了大量在线网站&#xff0c;Web 访问量迅速提升。在互联网泡沫破灭以前&#xff0c;这个领域基本是围绕如何对 Web 网站进行负载均衡与优化。因而在早期&#xff0c;也会有“Web 交换机”的说法。从1997年 F5 发布了 BIG-IP …

对负采样(negative sampling)的一些理解

负采样&#xff08;negative sampling&#xff09;通常用于解决在训练神经网络模型时计算softmax的分母过大、难以计算的问题。但在LightGCN模型论文的BPR LOSS中&#xff0c;负采样的概念可能与传统的softmax分母问题不完全一样。 在LightGCN模型中&#xff0c;不同于传统的协…

主机安装elasticsearch后无法登陆

问题描述 2023年7月31日11点02分&#xff0c;主机安装elasticsearch后无法登陆&#xff0c;通过后台查看主机宕机状态&#xff0c;CPU达到100%&#xff0c;按业务侧要求执行重启操作后发现主机黑屏无法正常进入系统&#xff0c;系统卡死。 2&#xff0e;原因分析 2.1通过故障…

WebGL 渲染三维图形作为纹理贴到另一个三维物体表面

目录 渲染到纹理 帧缓冲区对象和渲染缓冲区对象 帧缓冲区对象 帧缓冲区对象的结构 如何实现渲染到纹理 示例程序&#xff08;FramebufferObject.js&#xff09; 创建帧缓冲区对象&#xff08;gl.createFramebuffer&#xff08;&#xff09;&#xff09; gl.createFra…

机器学习——一元线性回归构造直线,并给出损失函数

目 录 Question 问题分析 1.概念补充 2.流程分析 3.注意 具体实现 最终成果 代码 思考&#xff1a; Question 在二维平面有n个点&#xff0c;如何画一条直线&#xff0c;使得所有点到该直线距离之和最短 如果能找到&#xff0c;请给出其损失函数 问题分析 1.概念…

C#,数值计算——Ranfib的计算方法与源程序

1 文本格式 using System; namespace Legalsoft.Truffer { /// <summary> /// Implements Knuths subtractive generator using only floating operations. See /// text for cautions. /// </summary> public class Ranfib { p…

【运维日常】华为云专线实现idc通过nat出网

本站以分享各种运维经验和运维所需要的技能为主 《python零基础入门》&#xff1a;python零基础入门学习 《python运维脚本》&#xff1a; python运维脚本实践 《shell》&#xff1a;shell学习 《terraform》持续更新中&#xff1a;terraform_Aws学习零基础入门到最佳实战 《k8…

Android Jetpack Compose之确定重组范围并优化重组

目录 1.概述2.确定Composable重组的范围3.优化重组的性能3.1 Composable 位置索引3.2 通过Key添加索引信息3.3 使用注解Stable优化重组 1.概述 前面的文章提到Compose的重组是智能的&#xff0c;Composable函数在进行重组时会尽可能的跳过不必要的重组&#xff0c;只对需要变化…

外包干了2个月,技术有明显退步...

先说一下自己的情况&#xff0c;本科生&#xff0c;18年通过校招进入广州某软件公司&#xff0c;干了接近3年的功能测试&#xff0c;今年国庆&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!可我已经在一个企业干了3年的功能测试&…

从1开始的Matlab(快速入门)

MATLAB软件版本&#xff1a;MATLAB R2016b 本文是博主从零开始学Matlab的记录&#xff0c;适合第一次接触Matlab的同学阅读。 一、基础介绍 1.1界面认识 1.2变量命名 注&#xff1a;Matlab中的注释 %% 独占一行的注释&#xff08;有上下横线分割&#xff09; % 普通注释 …

volatile修饰数组

结论&#xff1a;volatile修饰对象或数组时&#xff0c;只能保证他们的引用地址的可见性。 非volatile数组的可见性问题 public class Test {static int[] a new int[]{1};public static void main(String[] args) {new Thread(() -> { //线程Atry {Thread.sleep(1000);}…

Flink安装及简单使用

目录 转载处&#xff08;个人用最新1.17.1测试&#xff09; 依赖环境 安装包下载地址 Flink本地模式搭建 安装 启动集群 查看WebUI 停止集群 Flink Standalone搭建 安装 修改flink-conf.yaml配置文件 修改workers文件 复制Flink安装文件到其他服务器 启动集群 查…

4K视频一分钟大小是多少?如何转换为其他分辨率?

4K 分辨率是指大约 4,000像素的水平显示分辨率&#xff0c; 4K显示器、电视的分辨率为3840*2160&#xff1b;影院的4K分辨率为40962160。4K视频相较于常见的1080P分辨率更清晰、画面更流畅&#xff0c;然而与之对应的则是文件更大&#xff0c;更占用本地存储内存&#xff0c;在…

【计算机网络笔记十】计算机网络面试问题总结

1. 计算机网络的各层协议及作用&#xff1f; 计算机网络体系可以大致分为一下三种&#xff0c;OSI 七层模型、TCP/IP 四层模型和五层模型。 OSI 七层模型&#xff1a;大而全&#xff0c;但是比较复杂、而且是先有了理论模型&#xff0c;没有实际应用。TCP/IP 四层模型&#x…

web:[极客大挑战 2019]BabySQL

题目 点进页面显示如下 查看源代码 先尝试一下万能密码 没用&#xff0c;or被过滤了 试着双写看看 回显一串&#xff0c;也不是flag 先查询列数尝试一下&#xff0c;把union select过滤了&#xff0c;使用双写 构造payload /check.php?usernameadmin&password1 %27 ununi…

【小沐学Python】网络爬虫之urllib

文章目录 1、简介2、功能介绍2.1 urllib库和requests库2.2 urllib库的模块2.2.1 urllib.request2.2.2 urllib.error2.2.3 urllib.parse2.2.4 urllib.robotparser 2.3 入门示例 3、代码示例3.1 urlib 获取网页(1)3.2 urlib 获取网页(2) with header3.3 urllib post请求 4、urlli…

【独家工具】JMeterPerfReporter3.0正式版本,让你的JMeter更好用

Lemon-JMeterPerfReporter工具&#xff0c;是我们性能测试课程教研组根据JMeter性能测试报告的不足&#xff0c;定制开发的一个性能报告生成工具。有需要的同学&#xff0c;可以通过小编官方gitee账户下载&#xff0c;或咨询我免费获取哦&#xff01; 做过性能测试的人员都知道…

Scala第八章节

Scala第八章节 scala总目录 章节目标 能够使用trait独立完成适配器, 模板方法, 职责链设计模式能够独立叙述trait的构造机制能够了解trait继承class的写法能够独立完成程序员案例 1. 特质入门 1.1 概述 有些时候, 我们会遇到一些特定的需求, 即: 在不影响当前继承体系的情…

在线教育平台开发:数字化教育的奇妙时代

在今天的数字化时代&#xff0c;教育正在经历着前所未有的变革。在线教育平台的兴起已经改变了传统教育的局面&#xff0c;为学习者和教育者提供了无限的机会。本文将深入探讨在线教育平台开发的关键方面&#xff0c;并穿插一些实际代码示例&#xff0c;以帮助您了解如何创建一…