uniapp之uni-forms表单组件封装的双向数据绑定

news2024/11/25 9:43:38

前言 

在uniapp中, 封装组件的props单向数据流更为严格, 不允许改变子组件的props属性, 所以记录下uniapp下的form表单的组件是如何封装的, 双向数据是如何绑定的.

版本:  "@dcloudio/uni-ui": "^1.4.27", "vue": ">= 2.6.14 < 2.7"...

需求

实现下面这张图片这样的场景

实现代码

抽取了逻辑代码, 业务代码全部去除方便大家阅读.

父组件:

// 父组件:
<template>
    // uni-app不支持v-model:formData="formData"
    <hf-form-data v-model="formData" :config="config"/>
</template>
<script>
export default {
  name:"fatherComp",
  data() {
    return {
      config: [
          {
            type: "input",
            label: "我是输入框",
            key: "name",
            rules: [{ required: true, errorMessage: "请选择" }]
          },
          {
            type: "textarea",
            label: "我是文本域",
            key: "remark",
            rules: [{ required: true, errorMessage: "请选择" }],
          },
      ],
      // 和config数组的key一一对应
      formData: {
        name:"",
        remark: ""
      }
    };
  },
  watch: {
    formData: {
      handler(newVal) {
        console.log('父组件更新啦', newVal);
      },
      deep: true,
    },
  }
};
</script>

子组件:

// 子组件
<template>
   <uni-forms ref="form" :model="formValue">
       <view v-for="(item,i)in config" :key="i">
          <!-- 双向数据绑定 -->
         <uni-forms-item
          :name="item.key"
          :label="item.label"
          :rules="item.rules"
         >
           <input v-if="item.type === 'input'" v-model="formValue[item.key]"/>
           <textarea v-else-if="item.type === 'textarea'" v-model="formValue[item.key]"/>
         </uni-forms-item>
       </view>
   </uni-forms>
</template>
<script>
export default {
  name: "childComp",
  props: {
    config: {
      type: Array,
      default: () => [],
    },
    value: {
      type: Object,
      default: () => {},
    },
  },
  data() {
    return {
      formValue: {},
    };
  },
  watch: {
    // 2. 监听子组件的表单变更, 更新父组件
    formValue: {
      handler(newVal) {
        this.$emit("input", newVal);
      },
      deep: true,
    },
  },
  created() {
    this.formValue= { ...this.value }; // 1. 初始化赋值, 通过拷贝去除对象引用问题
  }
};
</script>

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

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

相关文章

xshell---git上传文件到gitee远程仓库配置

1.git下载 如果没有xshell下没有下载过git&#xff0c;可以参考这篇的教程&#xff1a;Linux配置安装 git 详细教程 下载后可以通过 git --version 查看git的版本号&#xff0c;验证是否安装成功 2.新建仓库 首先需要在gitee上注册一个账号 然后再主页面点击右上边框的 号…

uniapp——实现聊天室功能——技能提升

这里写目录标题 效果图聊天室功能代码——html部分代码——js部分代码——其他部分 首先声明一点&#xff1a;下面的内容是从一个uniapp的程序中摘录的&#xff0c;并非本人所写&#xff0c;先做记录&#xff0c;以免后续遇到相似需求抓耳挠腮。 效果图 聊天室功能 发送图片 …

《C++ Primer》第3章 字符串、向量和数组(三)

参考资料&#xff1a; 《C Primer》第5版《C Primer 习题集》第5版 3.5 数组&#xff08;P101&#xff09; 数组类似于 vector &#xff0c;不同点在于数组的大小固定不变&#xff0c;在某些情况下性能较好&#xff0c;但灵活性较差。 3.5.1 定义和初始化内置数组&#xff…

一文了解袋鼠云在实时数据湖上的探索与实践

近日&#xff0c;袋鼠云大数据引擎专家郝卫亮&#xff0c;为大家带来了《袋鼠云在实时数据湖上的探索与实践》主题分享&#xff0c;帮助大家能了解到什么是实时数据湖、如何进行数据湖选型及数据平台建设数据湖的经验。 如今&#xff0c;大规模、高时效、智能化数据处理已是“…

阿里云新用户:定义,专享福利及优惠活动

随着云计算技术的快速发展&#xff0c;越来越多的个人与企业开始将业务迁移到云端。阿里云作为国内领先的云计算服务提供商&#xff0c;为新用户提供了一系列专享福利和优惠活动。本文将详细介绍阿里云新用户的定义、专享福利和优惠活动&#xff0c;助力大家轻松上云&#xff0…

OPCAE接口

目录 1 主要接口 1.1 OPCEventServer对象 1.2 OPCEventSubscription对象 1.3 OPCEventAreaBrowser对象&#xff08;可选&#xff09; 1.4 自定义接口开发注意 2 OPCEventServer 2.1 接口介绍 2.2 接口方法 3 IOPCEventServer2 3.1 接口介绍 3.2 接口方法 4 IConnect…

堆排序(Topk问题)

1.堆排序 堆排序是在堆的思想上面进行延伸的一种排序方法,原理就是利用堆的特性. 堆排序首先得建堆,这里建堆有一个原则: 升序建大堆降序建小堆 利用堆删除的思想来进行排序: 建堆和堆删除都可以使用向下调整的方法来实现 堆删除的向下调整和建堆的向上调整在堆的实现这篇博…

快速搭建超轻量级图床——Cpolar+和树洞外链

文章目录 1.前言2. 树洞外链网站搭建2.1. 树洞外链下载和安装2.2 树洞外链网页测试2.3 cpolar的安装和注册 3.本地网页发布3.1 Cpolar临时数据隧道3.2 Cpolar稳定隧道&#xff08;云端设置&#xff09;3.3 Cpolar稳定隧道&#xff08;本地设置&#xff09; 4.公网访问测试5.结语…

MT6785(Helio G95)安卓核心板_联发科4G高能低耗安卓主板开发板

MTK6785&#xff08;Helio G95&#xff09;安卓核心板采用八核 CPU 具有两个强大的 Arm Cortex-A76 处理器内核&#xff0c;主频高达 2.05GHz&#xff0c;外加六个 Cortex-A55 高效处理器。其强大的图形性能由 Arm Mali-G76 MC4 提供&#xff0c;速度可提升至 900MHz 。高达 10…

【高效开发工具系列】Fork版本管理

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kuan 的首页,持续学…

CUDA小白 - NPP(9) 图像处理 Statistical Operations

cuda小白 原始API链接 NPP GPU架构近些年也有不少的变化&#xff0c;具体的可以参考别的博主的介绍&#xff0c;都比较详细。还有一些cuda中的专有名词的含义&#xff0c;可以参考《详解CUDA的Context、Stream、Warp、SM、SP、Kernel、Block、Grid》 常见的NppStatus&#xf…

游戏平台能否进行定制开发?

游戏平台通常可以进行定制开发&#xff0c;以满足游戏开发商或发行商的特定需求。定制开发可以确保平台更好地适应特定游戏的要求和运营策略。以下是一些常见的定制开发方面&#xff1a; 用户界面和外观&#xff1a;定制平台的用户界面和外观&#xff0c;以符合游戏公司和游戏本…

冒泡排序及其优化

前言 本文将简单介绍冒泡排序及其优化版本&#xff0c;默认从小到大顺序 什么是冒泡排序 冒泡排序是一种简单且经典的排序算法。 基本思想&#xff1a; 是通过反复交换相邻的未按顺序排列的元素&#xff0c;将最小&#xff08;或最大&#xff09;的元素逐渐“浮”到正确位置…

MongoDB差异数据对比的快速指南

MongoDB是一种非关系型数据库&#xff0c;它以灵活的 JSON-like 文档的形式存储数据&#xff0c;这种特性使其在处理大量数据和实现快速开发时更具有优势。而由于其灵活的数据模型和强大的性能&#xff0c;MongoDB 被广泛应用在各种业务场景中。随着业务的发展和数据的增长&…

浅谈STL|STL函数对象篇

一.函数对象概念 概念: 重载函数调用操作符的类&#xff0c;其对象常称为函数对象 函数对象使用重载的()时&#xff0c;行为类似函数调用&#xff0c;也叫仿函数 本质: 函数对象(仿函数)是一个类&#xff0c;不是一个函数 特点 函数对象在使用时&#xff0c;可以像普通函数那…

【RocketMQ】消息的拉取

在上一讲中&#xff0c;介绍了消息的存储&#xff0c;生产者向Broker发送消息之后&#xff0c;数据会写入到CommitLog中&#xff0c;这一讲&#xff0c;就来看一下消费者是如何从Broker拉取消息的。 RocketMQ消息的消费以组为单位&#xff0c;有两种消费模式&#xff1a; 广播…

C语言——三子棋游戏

本文目录 三子棋游戏简介三子棋游戏功能说明游戏界面 C语言代码实现多个文件共同实现game.hgame.ctest.c 三子棋游戏实现逻辑分析编写test.c 文件实现menu()函数实现game()函数打印空棋盘选手落子判断输赢实现game()函数 源代码game.hgame.ctest.c 更多C语言实战项目&#xff0…

微信会员卡开发流程

功能需求&#xff1a; 通过微信第三方平台创建的模板小程序&#xff0c;想要实现用户在小程序支付一定金额后领取会员卡&#xff0c;领取会员卡后可给用户下发一定数量的优惠券&#xff0c;并且实现用户在小程序消费享受商品折扣。 开发流程&#xff1a; 一、了解微信的3个平…

AMS爆炸来袭,上线即巅峰

1.关于首发项目Antmons(AMS)空投结果 Gate.io Startup 首发项目Antmons代币AMS于Aug15th,AM 07:00开始下单&#xff0c;24小时内下单同等对待总共有15,950人下单&#xff0c;下单总价值超过1,000万美金分发系数约为0.001640495298341。根据上线规则AMS项目认购成功&#xff0c;…

67、数据源配置 及 配置多个数据源--C3P0 数据源 和 Hikari 数据源

★ Spring Boot如何选择DataSource数据源 优先级从高到低&#xff1a; HikariCP > Tomcat pooling DataSource > Commons DBCP2 如果要使用Tomcat pooling DataSource这种池化数据源&#xff0c; 那么可以用</exclusions>这个把HikariCP 排除掉&#xff0c;然后sp…