《uni-app》表单组件-form表单

news2025/7/19 17:09:06

在这里插入图片描述

本文分享的Form组件为uni-app的内置组件Form,非扩展组件,两者在用法上其实大同小异,只是扩展组件的属性以及事件更多…没有本质上的区别~

《uni-app》表单组件-form表单

  • 一. 简介
  • 二. 基础用法
  • 三. @submit事件
  • 四. @reset事件
  • 五. report-submit属性与report-submit-timeout属性
  • 六. 注意事项
    • 6.1 校验功能
  • 七. demo示例演示
    • 7.1 场景说明
    • 7.2 demo实现代码
  • 八. 小结

一. 简介

From表单组件,具有数据收集、提交数据的功能,某种程度上说它就是一个 容器,这个容器内部可以有 inputcheckboxradiopicker 等组件填充,原则上所有的表单组件都必须置入from组件,再通过form组件收集内部组件数据并将内容通过接口发送至后台接收~
通过描述我们可以看出form表单在业务场景中 主要承担的职责 是一个 信息录入 的职能,换句话说,所有信息录入的功能都可以考虑使用form表单来实现,如注册,账号找回,个人信息填写,问卷调查等等~

二. 基础用法

基础用法如下:

<form></form>

form和绝大多数标签一样是 双标签 的,也就是说它具有闭合标签,因此书写标签时不可遗漏闭合标签,如下这种即是 错误示例

<!--- 错误示例 --->
<form />

但这个只是容器,实际开发中不可能会这么使用,毕竟不会有哪个业务场景只有一个壳,而壳里面啥内容都没有,常规示例代码如下:

<form>
  <view class="form-group"><input placeholder="请输入姓名" /></view>
  <view class="form-group">
    <radio-group >
      <radio></radio>
      <radio></radio>
    </radio-group>
  </view>
</form>

示例代码中form组件作为容器,内部具有input输入框以及radio单选框存在,其表现形态 效果图 如下:
在这里插入图片描述

三. @submit事件

@submit事件,触发后用于 收集内部组件信息,事件说明如下:

属性名类型说明平台差异说明
@submitEventHandle携带 form 中的数据触发 submit 事件,event.detail = {value : {‘name’: ‘value’} , formId: ‘’},report-submit 为 true 时才会返回 formId

示例代码如下:

<form @submit="formSubmit">
  <view class="form-group"><input placeholder="请输入姓名" /></view>
  <view class="form-group">
    <radio-group >
      <radio></radio>
      <radio></radio>
    </radio-group>
  </view>
  <!-- 新增button按钮触发submit事件 -->
  <view class="form-group"><button form-type="submit">Submit</button></view>
</form>

<script>
export default {
	methods: {
		formSubmit: function(e) {
			console.log(e);;
		}
	}
};
</script>

将from组件绑定 @submit 事件,其值对应一个函数,再通过将 buttonform-type 设置成 submit 即可实现点击按钮时 联动触发form表单的submit事件,其表现形态 效果图 如下:
在这里插入图片描述

其实,到这里还没有完成,当我们按照说明去使用的时候,发现e.detail中并没有如期望的那般获取到对应的值,具体内容如下图
在这里插入图片描述

detail中并没有如说明中存在的对应的值,原因是因为form内部的组件必须加上 name属性,示例代码如下:

<form @submit="formSubmit">
  <view class="form-group"><input name="input" placeholder="请输入姓名" /></view>
  <view class="form-group">
    <radio-group name="radio">
      <radio value="man"></radio>
    	<radio value="woman">女</radio
    </radio-group>
  </view>
  <!-- 新增button按钮触发submit事件 -->
  <view class="form-group"><button form-type="submit">Submit</button></view>
</form>

inputradio 都加上 name属性,加上后其结果如下:
在这里插入图片描述

如说明所说,正常获取到预期的值了;

四. @reset事件

@reset事件,触发后用于 重制内部组件的值,换句话说,相当于把内部组件的值都给清空掉,事件说明如下:

属性名类型说明平台差异说明
@resetEventHandle表单重置时会触发 reset 事件

用法和submit基本类似,示例代码如下:

<form @reset="formReset">
  <view class="form-group"><input name="input" placeholder="请输入姓名" /></view>
  <view class="form-group">
    <radio-group name="radio">
      <radio value="man"></radio>
      <radio value="woman"></radio>
    </radio-group>
  </view>
  <!-- 新增button按钮触发reset事件 -->
  <view class="form-group"><button form-type="reset">reset</button></view>
</form>

其表现形态 效果图 如下:
在这里插入图片描述

同时,@reset对应的事件会在组件的值被清空时同时触发,如现在有一个reset事件,触发时同时弹出弹窗,示例代码如下:

<script>
export default {
	methods: {
		formReset: function(e) {
			console.log(e);
			uni.showModal({
				content: '触发重制'
			});
		}
	}
};
</script>

其表现形态 效果图 如下:
在这里插入图片描述

五. report-submit属性与report-submit-timeout属性

report-submit属性report-submit-timeout属性,这是一对 应用于微信小程序中模板消息的属性,属性说明如下:

属性名类型说明平台差异说明
report-submitBoolean是否返回 formId 用于发送模板消息(opens new window)微信小程序、支付宝小程序
report-submit-timeoutnumber等待一段时间(毫秒数)以确认 formId 是否生效。如果未指定这个参数,formId 有很小的概率是无效的(如遇到网络失败的情况)。指定这个参数将可以检测 formId 是否有效,以这个参数的时间作为这项检测的超时时间。如果失败,将返回 requestFormId:fail 开头的 formId微信小程序2.6.2

简单的说,通过页面的 form 组件,属性 report-submittrue 时,可以声明为需要发送模板消息,此时点击 按钮提交表单 可以获取 formId,用于发送模板消息。
示例代码如下

<form :report-submit="true" :report-submit-timeout="100">
  <!-- 其它组件 -->
</form>

值得注意的是,模板消息功能微信小程序中已经不再支持了…对的,你没看错,转而支持的是 订阅消息模板,有兴趣的小伙伴可以仔细到小程序官网查看

六. 注意事项

6.1 校验功能

uni-app内置的form表单组件是不带验证功能的,很多UI库的form表单组件都提供表单验证功能,通过设置一定的规则校验内部组件,可能有小伙伴不知道什么是验证功能,这里简单的说一下吧,以element为例:

<el-form :model="ruleForm" :rules="rules" ref="ruleForm" label-width="100px" class="demo-ruleForm">
  <el-form-item label="活动名称" prop="name">
    <el-input v-model="ruleForm.name"></el-input>
  </el-form-item>
</el-form>
<script>
  export default {
    data() {
      return {
        ruleForm: {
          name: '',
        },
        rules: {
          name: [
            { required: true, message: '请输入活动名称', trigger: 'blur' },
            { min: 3, max: 5, message: '长度在 3 到 5 个字符', trigger: 'blur' }
          ],
        }
      };
    },
  }
</script>

通过设置 rules 可以给组件绑定一些验证规则,如上例中的规则就是存在两个,分别是:

  • 输入框不可为空,触发方式为失去焦点时触发;
  • 输入框内容最短长度时3个字符,最长长度为5个字符,触发方式为失去焦点时触发;

很明显,有规则校验的form表单更符合实际的应用场景,但很遗憾,内置组件并没有,有需求可以使用类似于 uView组件库 或者到 插件商城 自行查找对应组件~

七. demo示例演示

7.1 场景说明

本节以form表单组件结合一个 问卷调查形态的form表单,表单内部有以下组件:

  • 姓名,输入框组件
  • 性别,单选框组件
  • 爱好,复选框组件
  • 自我评价,多行输入框组件

接着通过 按钮 获取到这些输入框中对应的值,并打印显示到页面~
(PS:对于input,textarea等各个组件的用法可以参照Form表单系列中的对应组件说明~)

7.2 demo实现代码

<template>
	<view class="form-container">
		<!-- form演示 -->
		<view class="form-group">
			<h3>问卷调查</h3>
			<form class="form-main" @submit="formSubmit">
				<view class="form-group">
					<h4>姓名</h4>
					<view><input id="name" name="input" placeholder="请输入姓名" /></view>
				</view>

				<view class="form-group">
					<h4>性别</h4>
					<radio-group name="radio">
						<radio value="man"></radio>
						<radio value="woman"></radio>
					</radio-group>
				</view>
				<view class="form-group">
					<h4>爱好</h4>
					<checkbox-group name="checkbox">
						<checkbox value="bb">篮球</checkbox>
						<checkbox value="fb">足球</checkbox>
						<checkbox value="wb">网球</checkbox>
					</checkbox-group>
				</view>
				<view class="form-group">
					<h4>自我评价</h4>
					<textarea name="textarea" class="text-style" placeholder="请输入自我评价"></textarea>
				</view>
				<!-- 新增button按钮触发submit事件 -->
				<view class="form-group"><button form-type="submit">submit</button></view>
			</form>
		</view>
	</view>
</template>

<script>
export default {
	methods: {
		formSubmit: function(e) {
			console.log(e);
			uni.showModal({
				content: '问卷调查内容:' + JSON.stringify(e.detail.value)
			});
		}
	}
};
</script>

其表现形态 效果图 如下:
在这里插入图片描述

八. 小结

如果说 input,radio,checkbox等组件是表单组件的房屋建造中的砖瓦,那么form组件就是这个房子的钢筋水泥的结构骨架,只有在这个结构骨架里才能为这个房子添砖加瓦;
在实际的业务场景中,表单的使用频率是非常高的无论是移动端还是PC端都离不开表单,毕竟任何一个应用都会存在一些信息录入的功能~

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

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

相关文章

Tomcat安装配置及IDEA配置方法【亲测有效】

Tomcat安装配置及IDEA配置1.下载Tomcat2.配置Tomcat环境变量3.安装Tomcat4.启动Tomcat5.测试Tomcat6.IDEA配置Tomcat1.下载Tomcat Tomcat9官网下载地址 选择自己需要的版本&#xff0c;一般选择Windows 64位压缩包版本&#xff1a; 下载完后安装解压即可&#xff0c;解压后的…

如何使用nvm切换node版本

我比较懒惰,如非必要,不喜欢npm版本切换来切换去,感觉浪费我编程的时间.后来发现,现在偷的懒都是为将来的忙碌埋下的祸根. 言归正传,本文主要是讲解一下,如何使用nvm进行npm版本的切换. 工欲善其事必先利其器,我们先下载nvm;直接上下载链接(针对windows哈,毕竟我没mac本); 下载…

Code For Better 谷歌开发者之声——初识Web与谷歌,拉起兴趣之心。

个人名片&#xff1a; 博主&#xff1a;酒徒ᝰ. 个人简介&#xff1a;沉醉在酒中&#xff0c;借着一股酒劲&#xff0c;去拼搏一个未来。 本篇励志&#xff1a;程序是我的生命,但我相信爱她甚过爱我的生命。 目录一、了解谷歌浏览器1. 简介2.优点二、认识Web1. 简介2. 特点2. 网…

【云原生 | 21】Docker运行Web服务实战之Apache

作者简介&#xff1a;&#x1f3c5;云计算领域优质创作者&#x1f3c5;新星计划第三季python赛道第一名&#x1f3c5; 阿里云ACE认证高级工程师&#x1f3c5; ✒️个人主页&#xff1a;小鹏linux &#x1f48a;个人社区&#xff1a;小鹏linux&#xff08;个人社区&#xff09;欢…

【微信小程序】如何获得自己当前的定位呢?本文利用逆地址解析、uni-app带你实现

目录 前言 效果展示 一、在腾讯定位服务配置微信小程序JavaScript SDK 二、使用uni-app获取定位的经纬度 三、 逆地址解析&#xff0c;获取精确定位 四、小提示 前言 效果展示 一、在腾讯定位服务配置微信小程序JavaScript SDK 在浏览器搜索腾讯定位服务&#xff0c;找…

React(四) ——hooks的使用

&#x1f9c1;个人主页&#xff1a;个人主页 ✌支持我 &#xff1a;点赞&#x1f44d;收藏&#x1f33c;关注&#x1f9e1; 文章目录⛳React Hooks&#x1f4b8;useState(保存组件状态)&#x1f948;useEffect(处理副作用)&#x1f50b;useCallback&#xff08;记忆函数&#…

Sass 和 SCSS

▣Sass (Syntactically Awesome StyleSheets)&#xff0c;是由buby语言编写的一款css预处理语言&#xff0c;和html一样有严格的缩进风格&#xff0c;和css编写规范有着很大的出入&#xff0c;是不使用花括号和分号的&#xff0c;所以不被广为接受。 Sass 是一款强化 CSS 的辅助…

使用Nodejs搭建HTTP服务,并实现公网远程访问「内网穿透」

文章目录前言1.安装Node.js环境2.创建node.js服务3. 访问node.js 服务4.内网穿透4.1 安装配置cpolar内网穿透4.2 创建隧道映射本地端口5.固定公网地址前言 Node.js 是能够在服务器端运行 JavaScript 的开放源代码、跨平台运行环境。Node.js 由 OpenJS Foundation&#xff08;原…

微信小程序|基于小程序+云开发制作一个菜谱小程序

今天吃什么?这是一个让强迫症左右为难的问题,跟随此文基于小程序+云开发制作一个菜谱小程序,根据现有食材一键生成菜谱,省心又省力。 一、小程序1. 创建小程序</

【python】喜欢XJJ?这不得来一波大采集?

前言 大家早好、午好、晚好吖 ❤ ~欢迎光临本文章 俗话说的好&#xff1a;技能学了~就要用在自己喜欢得东西上&#xff01;&#xff01; 这我不得听个话~我喜欢小姐姐&#xff0c;跳舞的小姐姐 这不得用python把小姐姐舞采集下来~嘿嘿嘿 完整源码、素材皆可点击文章下方名片…

Java web学生信息管理系统(jsp)

&#x1f95e;目录 &#x1f36c;1 概述 1.1课程设计目的 1.2预备知识 JAVAWeb&#xff1a; MySQL&#xff1a; JSP&#xff1a; 1.3实训的内容和要求 &#x1f36c;2 需求分析 2.1系统目标 2.2功能分析&#xff1a; 2.3开发环境&#xff1a; &#x1f36c;3 设计步…

大数据热点城市波动图案例【CSS3实现 + 原理分析 + 源码获取】

一&#xff1a;案例效果 本次案例我们分析一下数据可视化页面最常见的热点图是如何实现的&#xff0c;其原理并不复杂&#xff0c;只需要用到CSS3动画属性 animation 以及 keyframe 关键帧即可&#xff0c;重点是向外扩散的环如何布局比较合适&#xff0c;以及每个环怎么扩散何…

HTML 5标签搭建页面结构--1

本文标签: HTML基本语法 排版标签 媒体标签 链接标签 文章目录 前言 一、基础认识 1.认识网页 2.微博标准 3.web标准的构成 4.小结 二、HTML基本结构解读 2.HTML标签及结构 1.标签的结构: 2.排版标签: 2.文本格式化标签: 3.媒体标签: 1.图像相关标签: 2.图片标签的 title …

JavaScript-百炼成仙(第1节掌握JavaScript基础1.1-1.21)

文章目录1.1 第一章 初入宗门1.2 第二章 直接量1.3 第三章 数据类型1.4 第四章 数据类型扩展内容:1.5 第五章 基础考核1.6 第六章 何老1.7 第七章 对象数据类型1.8 第八章 对象的取值1.9 第九章 循环遍历的奥妙小结&#xff1a;For 循环1.10 第十章 对象内容的遍历1.11 第十一章…

30个题型+代码(冲刺2023蓝桥杯)(上)

愿意的可以跟我一起刷&#xff0c;每个类型做1~5题 &#xff0c;4月前还可以回来系统复习 目录 &#x1f34e;注意 &#x1f33c;前言 &#x1f33c;一&#xff0c;前缀和 &#x1f44a;&#xff08;一&#xff09;3956. 截断数组 &#x1f333;Time Limit Exceeded &a…

如何用python代码,更改照片尺寸,以及更换照片底色

前言 python浅浅替代ps&#xff1f;如何用代码来p证件照并且更换底色&#xff1f; 唉&#xff0c;有个小姐姐给我扔了张照片&#xff0c;叫我帮忙给她搞成证件照的尺寸还得换底色&#xff0c;她说自己忙的很 可惜电脑上没有ps只有pycharm&#xff0c;没得办法只能来试试看代…

没有关系的话,那就去建立关系吧

今天给大家分享一道链表的好题--链表的深度拷贝&#xff0c;学会这道题&#xff0c;你的链表就可以达到优秀的水平了。力扣 先来理解一下题目意思&#xff0c;即建立一个新的单向链表&#xff0c;里面每个结点的值与对应的原链表相同&#xff0c;并且random指针也要指向新链表中…

vite基础使用及相关配置

前言 这篇文章主要是记录前段时间公司里以vite构建的一个小项目&#xff08;前端界面不多&#xff0c;主要功能及相关配置是在后端&#xff09;&#xff0c;挺简单的几个小页面。 说到vite&#xff0c;之前虽然都有学习了解及demo尝试&#xff0c;但因为业务等其他各方面因素也…

uniapp开发APP从开发到上架全过程(一)

前端时间受朋友委托帮他开发了一款APP&#xff0c;综合考虑了下&#xff0c;没有上原生&#xff0c;使用了uniapp这一套技术栈来进行开发 uniapp是dcloud推出的一套跨端前端解决方案&#xff0c;可以通过一套代码生成小程序、安卓、IOS、H5等代码&#xff0c;对于中小项目来说…

vue通知提醒消息

目录 前言 一、Notification 二、Notification引用 1.全局引用 2.单独引用 三、参数说明 四、简单案例 五、项目实战 1、定义全局Notification。 2、Websocket实时接收通知。 3、消息通知 前言 最近有个项目需求就是在客户端的右上角要实时展示提醒消息&#xff0c;下…