vue3 antd项目实战——Form表单使用【v-model双向绑定数据,form表单嵌套input输入框、Radio单选框】

news2024/9/25 19:23:25

vue3 ant design vue项目实战——单选框(Radio)的使用以及Form表单的双向绑定

  • 知识调用(form表单的源代码附在文章最后
  • 场景复现
  • 实现需求
    • form表单整体架构的搭建
    • input输入框文本域的嵌套
    • 单选组合Radio的嵌套
    • button按钮组合的嵌套
  • form表单源代码

本文依旧沿用ant design vue组件库和ts语言🔥🔥更多内容见Ant Design Vue官方文档

知识调用(form表单的源代码附在文章最后

🔥🔥 vue3+ant design vue+ts实战【ant-design-vue组件库引入】
🔥 Ant Design Vue组件库——在vue项目中使用单选框 Radio

场景复现

一个功能齐全的后台管理系统,一定离不开Form表单的使用,form表单有很多学问,从本期文章开始会详细介绍如何在项目中使用form表单完成数据的双向绑定各种组件的嵌套,最后形成封装好了的form表单,可以实现复用。

具体UI需求如下:(本期文章详细介绍

  • 1.表单需要有输入框限制输入字数,样式为文本域
  • 2.表单需要有单选组合样式为垂直平铺
  • 3.表单需要有按钮组合包括取消按钮和确认按钮

功能需求:(下期文章详细介绍

  • 1.表单的值需要动态绑定
  • 2.点击确认按钮,控制台能够正确打印表单提交的值
  • 3.点击取消按钮,表单内容能够重置
  • 4.点击确认按钮时,检查表单输入是否有为空的部分,给出相应提示

UI界面最终实现效果:
在这里插入图片描述

实现需求

一定别忘了,任何时候使用组件,都需要在main.ts文件中注册,才能在页面中使用。
组件的注册在《知识调用》文章中都能找到,这里就不多介绍了

form表单整体架构的搭建

form表单整体架构可以分为三个部分,也就是三个form-item,分别用于嵌套input输入框文本域radiogroup垂直单选框组合button按钮组合
html部分:

<a-form
   class="form"
   name="basic"
   :model="contentFormState"
   autocomplete="off"
   >
   <p style="font-size:16px;margin-top:24px;">
     <b>给 小朱 添加一条荣誉</b>
     <!-- input输入框文本域-->
   </p>
   <a-form-item name="promotionContent">
      <p>证书内容</p>
   </a-form-item>
   <a-form-item>
      <p style="margin-top:-10px">选择 <b>小朱</b> 需要绑定的证书</p>
      <!-- radiogroup单选框组合-->
   </a-form-item>
   <a-form-item class="button-box">
      <!-- 按钮组合-->
   </a-form-item>
</a-form>

css部分:(可以根据需求进行调整)

.form {
    margin:0 auto;
    width: 500px;
    height: 450px;
    margin-top: 15px;
    background-color: #FFFFFF;
    border: 1px solid rgba(172, 171, 171, 0.16);
    border-radius: 10px;
    position: relative;
    p {
        margin-left: 50px;
        margin-top: 20px;
        font-size: 15px;
        margin-bottom: 10px;
        font-family: "微软雅黑";
    }
    .button-box {
        position: absolute;
        bottom: -5px;
        left: 170px;
    }
}

实现效果如下:
在这里插入图片描述

input输入框文本域的嵌套

我们需要在第一个form-item中添加input输入框文本域,这里推荐使用textarea

<a-textarea
     style="width:400px;margin-left:50px"
     placeholder="请输入证书内容" 
     show-count 
     allow-clear
     :maxlength="100" 
     />

标签中属性的解释

  • 1.placeholder——文本域中的初始提示字句
    在这里插入图片描述
  • 2.show-count——显示输入字数
    在这里插入图片描述
  • 3.:maxLength——绑定最大长度
  • 4.allow-clear——清除按钮、点击即可清除所有输入内容
    在这里插入图片描述

css样式添加:(在form样式中添加input输入框的样式)
在这里插入图片描述
代码如下:

    input {
        width: 400px;
        margin-left: 50px;
    }

实现效果:
在这里插入图片描述

单选组合Radio的嵌套

html部分:(在第二个form-item中添加以下内容,嵌套单选组合)

<a-radio-group 
      name="certificatesRadioGroup"
      style="margin-top:5px"
      >
     <a-radio
           :style="radioStyle"
           v-for="item of certificatesOptionsValue" 
           v-model:value="item.options" 
           :key="item.id"
           >{{ item.options }}
      </a-radio>
</a-radio-group>

标签中属性的解释
1.:style——绑定自定义的选项样式

// 样式数据类型
interface radioStyleType {
    display:string,
    lineHeight:string,
    marginLeft:string,
    height:string,
}
// 单选框样式
const radioStyle = reactive<radioStyleType>({
    display: 'flex',
    height: '30px',
    lineHeight: '30px',
    marginLeft:'50px',
});

2.v-for——选项采用循环的方式输出

// 选择项数据类型
interface optionsType {
    id:number,
    options:string
}
// 证书选择框选择项
const certificatesOptionsValue = ref<optionsType[]>([
    {"id":1,"options":"2022年技术部年度证书"},
    {"id":2,"options":"2023年技术部年度证书"},
    {"id":3,"options":"2024年技术部年度证书"},
])

现在我们来看一下实现效果:
在这里插入图片描述

button按钮组合的嵌套

html部分:(在第三个form-item中添加以下代码,样式之前已经写好,这里只需要设置两个按钮之前的间隔即可)

<a-button>取消</a-button>
<a-button 
   type="primary" 
   style="margin-left:10px"
   >确定
</a-button>

此时我们来看看最终的实现效果:
在这里插入图片描述
和给出的UI需求已经一模一样,到目前为止,页面的渲染工作已经完成。

form表单源代码

html部分:

<a-form
   class="form"
   name="basic"
   :model="contentFormState"
   autocomplete="off"
   >
   <p style="font-size:16px;margin-top:24px;">
     <b>给 小朱 添加一条荣誉</b>
   </p>
   <a-form-item
      name="promotionContent"
      >
      <p>证书内容</p>
      <a-textarea
         v-model:value="contentFormState.certificates_content"
         style="width:400px;margin-left:50px"
         placeholder="请输入证书内容" 
         show-count 
         allow-clear
         :maxlength="100" 
         />
    </a-form-item>
    <a-form-item>
       <p style="margin-top:-10px">选择 <b>小朱</b> 需要绑定的证书</p>
       <a-radio-group 
          v-model:value="contentFormState.certificates_select" 
          name="certificatesRadioGroup"
          style="margin-top:5px"
          >
          <a-radio
             :style="radioStyle"
             v-for="item of certificatesOptionsValue" 
             v-model:value="item.options" 
             :key="item.id"
             >{{ item.options }}
          </a-radio>
       </a-radio-group>
    </a-form-item>
    <a-form-item class="button-box">
       <a-button @click="cancelContent()">取消</a-button>
       <a-button 
          type="primary" 
          style="margin-left:10px"
          @click="confirmContent()"
          :disabled="contentFormState.confirm == 0 ? true : false"
          >确定
       </a-button>
    </a-form-item>
</a-form>

css部分:

.form {
    margin:0 auto;
    width: 500px;
    height: 450px;
    margin-top: 15px;
    background-color: #FFFFFF;
    border: 1px solid rgba(172, 171, 171, 0.16);
    border-radius: 10px;
    position: relative;
    input {
        width: 400px;
        margin-left: 50px;
    }
    p {
        margin-left: 50px;
        margin-top: 20px;
        font-size: 15px;
        margin-bottom: 10px;
        font-family: "微软雅黑";
    }
    .button-box {
        position: absolute;
        bottom: -5px;
        left: 170px;
    }
}

ts部分:

import { ref, reactive } from "vue"
import { Router, useRouter } from "vue-router";

const router : Router = useRouter();
// 样式数据类型
interface radioStyleType {
    display:string,
    lineHeight:string,
    marginLeft:string,
    height:string,
}
// 单选框样式
const radioStyle = reactive<radioStyleType>({
    display: 'flex',
    height: '30px',
    lineHeight: '30px',
    marginLeft:'50px',
});

// 选择项数据类型
interface optionsType {
    id:number,
    options:string
}
// 证书选择框选择项
const certificatesOptionsValue = ref<optionsType[]>([
    {"id":1,"options":"2022年技术部年度证书"},
    {"id":2,"options":"2023年技术部年度证书"},
    {"id":3,"options":"2024年技术部年度证书"},
])

当然,现在实现的只是UI界面,真正核心的是数据的动态绑定,让表单每个部分的值能够存储在变量当中,从而进一步实现后续的提交与重置功能。


vue项目实战中关于Form表单用法有很多,后期会不定期更新~
感兴趣的小伙伴可以订阅本专栏,方便后续了解学习~
觉得这篇文章有用的小伙伴们可以点赞➕收藏➕关注哦~

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

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

相关文章

小米手机不为人知的秘密—后台静默安装任何应用

导读你是否拥有一台小米&#xff0c;HTC&#xff0c;三星或者是一加的 Android 手机呢&#xff1f;如果回答是肯定的&#xff0c;那么你应该意识到&#xff0c;几乎所有的智能手机厂商提供的定制 ROM&#xff0c;如 CyanogenMod、Paranoid Android、 MIUI 或者一些其它的 ROM 都…

再谈指针(12)

目录 1、字符指针 2、指针数组 3、数组指针 1、定义 2、&数组名VS数组名 3、数组指针的使用 1、二维数组的数组名 4、数组参数、指针参数 1、一维数组传参 2、二维数组传参 3、一级指针传参 4、二级指针传参 5、函数指针 6、函数指针数组 7、指向函数指针数…

SpringCloud之Sleuth全链路日志跟踪

文章目录1 Sleuth链路跟踪1.1 分布式系统面临的问题1.2 Sleuth是什么1.3 Zipkin是什么1.4 链路监控相关术语1.5 实战练习1.5.1 pom.xml1.5.2 添加yml配置1.5.3 添加控制器1.5.4 测试访问1.6 Zipkin1.6.1 下载与启动1.6.2 搭建链路监控步骤1.6.2.1 搭建8990提供者1.6.2.2 搭建89…

08 `.o`中的汇编信息 hopper disassembler 调试 HelloWorld

前言 上周[2020.05.23]想要 直接使用 fastdebug 版本的 jdk 来进行调试, 可惜失败了 原来是 缺少 可执行文件关联的, object file, 里面记录了 关联的源码的一些信息 看来还是 免不了, 需要 手动 编译 open jdk, 哎 本文主要是两个东西 : 1. 查看 object file 中的汇编信…

CSS权威指南(一)CSS概述

文章目录1.元素2.引入样式表3.样式表4.媒体查询5.特性查询1.元素 &#xff08;1&#xff09;置换元素和非置换元素 置换元素&#xff0c;指用来置换元素内容的部分不由文档内容直接表示。比如img标签。非置换元素&#xff0c;元素的内容是由用户代理在元素自身生成的框中显示…

这样的C盘或许还有?救救C盘......

C盘红了&#xff01;&#xff01;&#xff01; 大部分软件默认缓存在C盘&#xff08;有的甚至只能安装到C盘&#xff09; C盘太满电脑运行会很卡顿 对于这种情况&#xff0c;为了节约C盘空间&#xff0c;我们可以将这些被迫存在C盘的文件挪到其他盘 但是有的应用无法更改默…

C++ 显示图片

编译环境为codeblocks 20.03&#xff0c;编译器为mingw64非自带的版本&#xff08;版本号多少忘记了&#xff09; 头文件 #include <graphics.h>//图形库 #include <conio.h>//_getch() 显示图片代码 int main() {initgraph(640,360,EX_SHOWCONSOLE);//初始化绘…

我亲身经历的2022年软件质量工作——测试工作的经验总结及一些建议

2022年对于大部分人来说都是辛苦的一年。对于整个社会&#xff0c;疫情反反复复&#xff0c;折磨的每一个人都心力交瘁。 经济下滑&#xff0c;失业率上升似乎听到的都是不好的消息。对于整个互联网行业也频频传出大厂裁员的消息。 而质量团队在大厂的裁员计划里也是首当其冲。…

4)Django模型,表单,视图,路由

目录 一 Django模型 Django ORM 数据库配置 Django 如何使用 mysql 数据库 实例 定义模型 创建 APP 数据库操作 添加数据 获取数据 更新数据 删除数据 二 Django 表单 HTTP 请求 GET 方法 POST 方法 Request 对象 QueryDict对象 三 Django视图 视图层 请求…

Vault的程序侧接入方式-AppRole

前言&#xff1a; 程序侧的接入对于Vault来说也是一种Accessor的接入&#xff0c;而AppRole绝对不是Vault首推的程序侧接入方式&#xff0c;但它是最方便的接入方式。 AppRole的本质是由Vault为程序单独引入一套由Vault托管的鉴权方式&#xff0c;对于安全平台来说没引入一套…

videojs-flvjs:video.js + flv.js播放m3u8和flv视频

videojs-flvjs是video.js的扩展&#xff0c;让video.js支持flv.js播放器&#xff0c;可以在video.js的techOrder里配置flvjs播放器。 下面做了一个切换m3u8和flv直播流的简易工具&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta ch…

线程安全(万字详解)

目录 线程安全 概念 用一段代码感受线程安全 线程安全问题的原因 修改上述代码,使其线程安全 synchronized synchronized使用方法 锁对象的规则 synchronized用法,代码展示 monitor lock sychronized的特性 java标准库中的线程安全类 死锁 死锁的常见原因 多个…

LVGL学习笔记9 - 标签Label

目录 1. 显示字符串 1.1 lv_label_set_text 1.2 lv_label_set_text_fmt 1.3 lv_label_set_text_static 2. 设置长字符串模式 3. 改变颜色 3.1 改变背景颜色和对比度 3.2 设置字符串颜色 3.2.1 设置Style的字符串颜色 3.2.2 设置对象的字符串颜色 3.2.3 局部改色 显示…

钧瓷产业将占禹州GDP50%以上,产生千亿市值钧瓷生态型科技公司

这里的上市指沪深的主板&#xff0c;创业板和科创板&#xff0c;区域的挂牌不算。 这个数据是根据禹州钧瓷产业2022年实际税收&#xff0c;综合钧瓷产业报税幅度&#xff0c;钧瓷数据开放平台&#xff0c;钧瓷产业决策内参&#xff0c;钧瓷产业化&#xff0c; 数字化后的预期增…

【CUDA入门笔记】GPU存储结构模型(1)

GPU存储结构模型 1.CPU可以读写GPU设备中的Global Memory、Constant Memory以及Texture Memory内存储的内容&#xff1b;主机代码可以把数据传输到设备上&#xff0c;也可以从设备中读取数据&#xff1b; 2.GPU中的线程使用Register、Shared Memory、Local Memory、Global Mem…

信息时代,企业如何安全管理数据

随着企业信息化的发展&#xff0c;企业所产生的数据量也越来越多&#xff0c;企业数据的存储安全和传输安全管理工作则成为企业数据管理者的重中之重。但是对数据的保护要依靠一定的基础设施&#xff0c;目前&#xff0c;世界各国对数据保护的基础设施建设还是不够完善&#xf…

VSCode搭建ruby开发调试环境

安装rvm rvm是ruby版本管理工具&#xff0c;可以管理本地的ruby的版本 curl -sSL https://get.rvm.io | bash -s stable安装ruby 使用 rvm list known获取已知的ruby版本&#xff0c;这里安装3.0.0版本的ruby rvm install 3.0.0新建ruby文件 在VSCode中新建ruby文件main.r…

【强训】Day1

努力经营当下&#xff0c;直至未来明朗&#xff01; 文章目录一、选择二、编程1. 组队竞赛2. 删除公共字符答案1. 选择2. 编程普通小孩也要热爱生活&#xff01; 一、选择 下列选项中属于面向对象编程主要特征的是&#xff08;&#xff09; A 继承 B 自顶向下 C 模块化 D 逐步…

【BP靶场portswigger-服务端4】操作系统命令注入-5个实验(全)

目录 一、操作系统命令注入 1、意义 2、有用的命令 3、注入操作系统命令的方式 4、防止操作系统命令注入攻击 二、执行任意命令 1、示例&#xff1a; 实验1&#xff1a;操作系统命令注入&#xff08;简单&#xff09; 三、盲操作系统命令注入漏洞 1、简述 2、示例 3…

Spring Cloud 2022.0.0正式发布:OpenFeign稳得很全面迈向GraalVM

本文已被https://yourbatman.cn收录&#xff1b;女娲Knife-Initializr工程可公开访问啦&#xff1b;程序员专用网盘https://wangpan.yourbatman.cn&#xff1b;技术专栏源代码大本营&#xff1a;https://github.com/yourbatman/tech-column-learning&#xff1b;公号后台回复“…