• 9.14 Day51---ElementUI表单校验


    目录

    ElementUI表单校验

    回忆jQuery表单校验是怎么做的

    ElementUI校验

    分析:model

    分析:rules

    ref 可以理解为给表单取名字

    是表单子元素项

    label属性

    prop属性

    提交按钮

    重置按钮

    规则对象中有哪些属性可以使用

    Axios前后端交互规范

    GET请求 (查询)

    POST请求 (添加)

    PUT请求 (修改)

    DELETE请求 (删除)

    后端控制器


    ElementUI表单校验

    回忆jQuery表单校验是怎么做的

    1. 表单元素注册事件

    2. 事件绑定回调函数

    3. 在回调函数中获取用户输入的值

    用js代码进行校验

    用正则表达式进行校验

    ElementUI校验

    1. 写校验规则

    2. 绑定校验规则

    是整个form表单的父元素

    重点讲一下这三个表单属性

    属性前面带:的, 取值必须是data中声明的变量

    属性名前面不带:的, 取值是一个直接量

    :model="ruleForm"

    :rules="rules"

    ref="ruleForm"

    分析:model

    :model = "变量"

    :model 绑定数据

    37a689a87f1c3e06b9686a9f02bd0725.png

    分析:rules

    :rules绑定校验规则

    ref 可以理解为给表单取名字

    注意ref前面没有: , 取值是一个直接量

    也就是说这个取值 userForm就是一个字符串, 不是一个变量

    是表单子元素项

     

    <el-form-item label="用户编号" prop="id">

    <el-input v-model="user.id" readonly disabled>el-input>

    el-form-item>

    <el-form-item label="用户名" prop="username">

    <el-input v-model="user.username">el-input>

    el-form-item>

    label属性

    取值是直接量, 显示表单元素的左边文字

    prop属性

    取值是直接量

    从:rules绑定的校验规则对象中寻找名为"username"的校验规则

    rules: {

    username: [

    { required: true, message: '请输入用户名', trigger: 'blur' },

    { min: 3, max: 8, message: '长度在 3 到 8 个字符', trigger: 'blur' }

    ]

    }

     990c4093dc88146c099ef16e480050e1.png

    提交按钮

    @click是注册点击事件 ==> 调用submitForm函数, 并传参数'userForm'

    methods:{} 中需要定义这个submitForm函数

    this.$refs[formName]表示根据参数formName找到视图中指定名称的表单

    这个formName是上面提交按钮传过来的'userForm'

    视图中有一个ref="userForm"的表单

    validate() 函数的作用是将这个表单中所有带有校验规则的子项全部进行校验

    validate() 函数的参数是一个箭头函数 (valid) =>{}

    这个valid是一个boolean值, 为true表示所有元素全部校验通过, 为false表单有校验失败的

    validate((valid) =>{

    if( valid ){ // valid为true 才执行提交表单

    }

    })

    重置按钮

    按钮

    回调函数

    规则对象中有哪些属性可以使用

    属性名

    说明

    required

    必填字段,即非空验证。视图的元素上会显示*

    min/max

    判断数据大小范围,通常对数字大小范围做校验。对于字符串和数组类型,将根据长度进行比较。

    len

    具体长度

    enum

    枚举, 取值为数组

    whitespace

    验证是否只有空格

    pattern

    正则校验, 取值为正则表达式

    message

    错误信息

    trigger

    触发时机

    Axios前后端交互规范

    基于Axios封装的http通信模块

    在main.js中导入了http对象, 并且注册到了Vue的原型对象上面, 取名为$http

    有了上面的代码前提

    我们可以在任意一个Vue组件中使用

    this.$http发起http请求

    GET请求 (查询)

    情况1: 根据id查询一个对象

    因为只有一个参数id, 所有可以使用占位符的方式将id拼接在地址后面传

    后端取得时候, 注意在地址里面取参数

    情况2: 条件+分页查询一个集合

    参数是一个对象, 里面包含多个条件和分页参数

    必须把参数放在 {params: {}}

    这种方式得参数会拼接在url后面

     

    this.$http.get('url', {params: 参数})

    .then((data) => {

    })

    POST请求 (添加)

    这种方式得参数会放在请求体里面

     

    this.$http.post('url', 参数)

    .then((data) => {

    })

    后端需要使用@RequestBody请求体里面获取数据, 否则数据取不到

     338b96778dee7e97c145dbe610dd7ae8.png

    PUT请求 (修改)

    参数得传和取同POST请求

    1. this.$http.put('', 参数)
    2. .then((data) => {
    3. })

    DELETE请求 (删除)

    这种请求一般也是携带id, 可以使用占位符得方式

    1. this.$http.delete('')
    2. .then((data) => {
    3. })

    后端控制器

    处理get请求用@GetMapping

    处理post请求用@PostMapping,参数使用@RequestBody从请求体获取

    处理put请求用@PutMapping,参数使用@RequestBody从请求体获取

    处理delete请求用@DeleteMapping

    所有得控制器方法得返回值统一使用封装得ResponseData类型

    所有得控制器方法中只有一行return 代码

    这样控制器层得代码会非常干净,整洁

    所有得业务代码全部交给Service层取实现

    1. @RestController
    2. @RequestMapping("/api/user")
    3. public class UserController {
    4. @Resource
    5. private UserService userService;
    6. @GetMapping("/list")
    7. public ResponseData list(UserPage userPage){
    8. return userService.selectPage(userPage);
    9. }
    10. @DeleteMapping("/del/{id}")
    11. public ResponseData del(@PathVariable("id") Integer id){
    12. return userService.logicDeleteById(id);
    13. }
    14. @GetMapping("/detail/{id}")
    15. public ResponseData detail(@PathVariable("id") Integer id){
    16. return userService.selectById(id);
    17. }
    18. @PutMapping("/edit")
    19. public ResponseData edit(@RequestBody User user){
    20. return userService.edit(user);
    21. }
    22. @PostMapping("/login")
    23. public ResponseData login(@RequestBody User user){
    24. return userService.login(user);
    25. }
    26. }

    因为控制器层方法得返回值是ResponseData类型

    这里直接返回调用得service层方法得返回值

    那么,编写Service层接口和实现类得时候,也需要统一Service层全部返回ResponseData类型

    1. public interface UserService {
    2. ResponseData selectPage(UserPage userPage);
    3. ResponseData logicDeleteById(Integer id);
    4. ResponseData selectById(Integer id);
    5. ResponseData login(User user);
    6. ResponseData edit(User user);
    7. }
    1. @Service
    2. public class UserServiceImpl implements UserService {
    3. @Resource
    4. private UserMapper userMapper;
    5. @Override
    6. public ResponseData selectPage(UserPage userPage){
    7. QueryWrapper qw=new QueryWrapper();
    8. qw.likeRight(StringUtils.hasText(userPage.getUsername()),"username",userPage.getUsername());
    9. qw.likeRight(StringUtils.hasText(userPage.getIdCode()),"id_code",userPage.getIdCode());
    10. qw.likeRight(StringUtils.hasText(userPage.getMobile()),"mobile",userPage.getMobile());
    11. qw.eq("is_delete", 0);
    12. return ResponseData.success(userMapper.selectPage(userPage,qw));
    13. }
    14. @Override
    15. public ResponseData logicDeleteById(Integer id) {
    16. User user = new User();
    17. user.setId(id);
    18. user.setIsDelete(1);
    19. return ResponseData.success(userMapper.updateById(user) > 0 ? true: false);
    20. }
    21. @Override
    22. public ResponseData selectById(Integer id) {
    23. return ResponseData.success(userMapper.selectById(id));
    24. }
    25. @Override
    26. public ResponseData login(User user) {
    27. User dbUser = userMapper.selectByUsername(user.getUsername());
    28. if (dbUser == null){
    29. throw new CustomException(ResponseMsg.USER_NOT_EXIST);
    30. }else {
    31. if(!user.getPassword().equals(dbUser.getPassword())){
    32. throw new CustomException(ResponseMsg.PASSWORD_ERROR);
    33. }
    34. }
    35. String token = TokenUtil.getToken(dbUser);
    36. dbUser.setToken(token);
    37. return ResponseData.success(dbUser);
    38. }
    39. @Override
    40. public ResponseData edit(User user) {
    41. return ResponseData.success(userMapper.updateById(user));
    42. }
    43. }

    在调试前后端通信得时候,一定要学会浏览器F12功能里面得网络

     

  • 相关阅读:
    内衣洗衣机和手洗哪个干净?迷你洗衣机品牌推荐
    355. 设计推特
    lua 中文字符的判断简介
    历史上最愚蠢的代码
    QML相关bug记录
    Axure绘制折叠面板-手风琴效果
    套接字编程:TCP通信程序
    2024年CSP-J暑假冲刺训练营(2):排序
    嘉立创EDA的一些使用技巧
    抖音背后的视频体验分析体系与优化技术揭秘
  • 原文地址:https://blog.csdn.net/qq_63771774/article/details/126857730