程序员scholar 程序员scholar
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
首页
  • Java 基础

    • JavaSE
    • JavaIO
    • JavaAPI速查
  • Java 高级

    • JUC
    • JVM
    • Java新特性
    • 设计模式
  • Web 开发

    • Servlet
    • Java网络编程
  • Web 标准

    • HTML
    • CSS
    • JavaScript
  • 前端框架

    • Vue2
    • Vue3
    • Vue3 + TS
    • 微信小程序
    • uni-app
  • 工具与库

    • jQuery
    • Ajax
    • Axios
    • Webpack
    • Vuex
    • WebSocket
    • 第三方登录
  • 后端与语言扩展

    • ES6
    • Typescript
    • node.js
  • Element-UI
  • Apache ECharts
  • 数据结构
  • HTTP协议
  • HTTPS协议
  • 计算机网络
  • Linux常用命令
  • Windows常用命令
  • SQL数据库

    • MySQL
    • MySQL速查
  • NoSQL数据库

    • Redis
    • ElasticSearch
  • 数据库

    • MyBatis
    • MyBatis-Plus
  • 消息中间件

    • RabbitMQ
  • 服务器

    • Nginx
  • Spring框架

    • Spring6
    • SpringMVC
    • SpringBoot
    • SpringSecurity
  • SpringCould微服务

    • SpringCloud基础
    • 微服务之DDD架构思想
  • 日常必备

    • 开发常用工具包
    • Hutoll工具包
    • IDEA常用配置
    • 开发笔记
    • 日常记录
    • 项目部署
    • 网站导航
    • 产品学习
    • 英语学习
  • 代码管理

    • Maven
    • Git教程
    • Git小乌龟教程
  • 运维工具

    • Docker
    • Jenkins
    • Kubernetes
  • 算法笔记

    • 算法思想
    • 刷题笔记
  • 面试问题常见

    • 十大经典排序算法
    • 面试常见问题集锦
关于
GitHub (opens new window)
npm

(进入注册为作者充电)

  • 原生微信小程序

  • uniapp多端开发

    • 快速入门

    • 内置组件

      • 视图容器

      • 基础内容

      • 表单组件

        • 按钮组件
        • 复选框组件
        • 富文本编辑器组件
        • 表单组件
          • 1. 什么是 form 组件?
          • 2. form 组件的常用属性
            • 2.1 提交事件 @submit
            • 2.2 重置事件 @reset
          • 3. 表单控件组合使用案例
          • 4. 内置 behaviors 处理自定义组件
        • 输入框组件
        • 标签组件
        • 选择器组件
        • 嵌入式选择器组件
        • 单选按钮组组件
        • 滑块选择器组件
        • 开关组件
        • 多行输入框组件
      • 路由页面跳转

      • 媒体组件

      • 地图

      • 画布

      • 网页嵌入

      • 页面属性配置节点

      • nvue组件

      • 小程序组件

    • 扩展组件

  • 小程序开发
  • uniapp多端开发
  • 内置组件
  • 表单组件
scholar
2024-10-21
目录

表单组件

# 表单组件

form 组件是 Uniapp 中用于将用户输入的 <switch>、<input>、<checkbox>、<slider>、<radio>、<picker> 等表单控件的值进行统一提交的容器组件。点击表单中的 submit 按钮时,表单控件的 value 值会统一提交。每个表单控件需要设置 name 属性,以作为提交时的键名。

# 1. 什么是 form 组件?

form 组件是用于收集和提交用户输入的控件集合。通过 form 组件,开发者可以在点击提交按钮时统一获取表单内所有控件的值。表单支持多种常见的输入控件,如开关、输入框、复选框、单选框、滑块、选择器等。通过提交事件,可以将这些控件的值以对象的形式提交,便于数据收集和处理。

使用场景

  • 表单提交:用户在表单中输入数据,并通过提交按钮将数据提交到服务器或进行下一步处理。
  • 多控件数据管理:将多个输入控件的值收集并统一处理,适用于注册、登录、搜索、配置等场景。
  • 表单重置:在需要时提供重置按钮,清空用户的输入。

# 2. form 组件的常用属性

form 组件提供了一些属性和事件,用于处理表单的提交与重置等操作。以下是常用属性的详细说明:

属性名 类型 说明 平台差异说明
report-submit Boolean 是否返回 formId,用于发送模板消息(微信、支付宝等平台支持)。 微信小程序、支付宝小程序
report-submit-timeout Number 等待指定时间(毫秒)以确认 formId 是否生效,用于确保网络失败时仍能获取 formId。 微信小程序 2.6.2+
@submit EventHandle 表单提交时触发,事件参数 detail 返回表单数据 {value: {name: value}, formId: ''}。
@reset EventHandle 表单重置时触发,清空所有表单控件的值。

# 2.1 提交事件 @submit

  • 说明:当点击 form 中 submit 按钮时,表单内所有控件的值会通过 @submit 事件提交,事件参数 detail 返回表单控件的值和 formId(如果启用 report-submit)。
  • 类型:EventHandle
<template>
  <view>
    <form @submit="onFormSubmit">
      <!-- 表单控件 -->
      <input name="username" placeholder="输入用户名" />
      <input name="password" type="password" placeholder="输入密码" />
      <button form-type="submit">提交</button>
    </form>
  </view>
</template>

<script setup>
const onFormSubmit = (e) => {
  // 获取表单的提交数据
  console.log('表单提交数据:', e.detail.value);
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

image-20241021020802232

# 2.2 重置事件 @reset

  • 说明:当点击 form 中 reset 按钮时,表单内所有控件的值会被清空,触发 @reset 事件。
  • 类型:EventHandle
<template>
  <view>
    <form @reset="onFormReset">
      <!-- 表单控件 -->
      <input name="username" placeholder="输入用户名" />
      <button form-type="reset">重置</button>
    </form>
  </view>
</template>

<script setup>
const onFormReset = () => {
  console.log('表单已重置');
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

# 3. 表单控件组合使用案例

form 组件内可以包含多种表单控件,如 switch、radio、checkbox、slider、input 等。通过设置每个控件的 name 属性,可以在表单提交时获取控件的值。

<template>
  <view>
    <form @submit="onFormSubmit" @reset="onFormReset">
      <!-- Switch 开关 -->
      <view class="form-item">
        <text>开关</text>
        <switch name="switch" />
      </view>

      <!-- Radio 单选框 -->
      <view class="form-item">
        <text>单选框</text>
        <radio-group name="radio">
          <label>
            <radio value="option1" /> 选项一
          </label>
          <label>
            <radio value="option2" /> 选项二
          </label>
        </radio-group>
      </view>

      <!-- Checkbox 复选框 -->
      <view class="form-item">
        <text>复选框</text>
        <checkbox-group name="checkbox">
          <label>
            <checkbox value="option1" /> 选项一
          </label>
          <label>
            <checkbox value="option2" /> 选项二
          </label>
        </checkbox-group>
      </view>

      <!-- Slider 滑块 -->
      <view class="form-item">
        <text>滑块</text>
        <slider name="slider" value="50" show-value />
      </view>

      <!-- Input 输入框 -->
      <view class="form-item">
        <text>输入框</text>
        <input name="input" placeholder="请输入内容" />
      </view>

      <!-- 提交和重置按钮 -->
      <view class="form-buttons">
        <button form-type="submit">提交</button>
        <button form-type="reset">重置</button>
      </view>
    </form>
  </view>
</template>

<script setup>
const onFormSubmit = (e) => {
  console.log('表单提交数据:', e.detail.value);
};

const onFormReset = () => {
  console.log('表单已重置');
};
</script>

<style scoped>
.form-item {
  margin: 10px 0;
}
.form-buttons {
  display: flex;
  justify-content: space-around;
  margin-top: 20px;
}
</style>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76

recording


# 4. 内置 behaviors 处理自定义组件

在表单中,默认支持的表单控件如 input、switch 等可以直接获取值。但在一些自定义组件中,无法自动获取表单值。此时可以使用 behaviors 来实现类似表单控件的行为。

  • 内置 uni://form-field 行为:通过将该行为添加到自定义组件中,表单可以自动识别该组件并在 submit 事件中获取其值。
<template>
  <view>
    <form @submit="onFormSubmit">
      <!-- 自定义表单组件 -->
      <comp-input name="customInput" v-model="customInputValue" />
      <button form-type="submit">提交</button>
    </form>
  </view>
</template>

<script setup>
import { ref } from 'vue';

// 自定义表单组件的值
const customInputValue = ref('初始值');

const onFormSubmit = (e) => {
  console.log('表单提交数据:', e.detail.value);
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
  • 自定义组件 compInput 实现:
<template>
  <view>
    <!-- 自定义输入框 -->
    <input :value="modelValue" @input="onInput" />
  </view>
</template>

<script>
export default {
  name: 'compInput',
  behaviors: ['uni://form-field'],
  props: {
    modelValue: String,
  },
  methods: {
    onInput(e) {
      this.$emit('update:modelValue', e.detail.value);
    },
  },
};
</script>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
编辑此页 (opens new window)
上次更新: 2025/02/01, 02:18:15
富文本编辑器组件
输入框组件

← 富文本编辑器组件 输入框组件→

Theme by Vdoing | Copyright © 2019-2025 程序员scholar
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式