前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >如何使用FormKit构建Vue.Js表单

如何使用FormKit构建Vue.Js表单

作者头像
前端达人
发布于 2023-09-11 12:49:33
发布于 2023-09-11 12:49:33
49700
代码可运行
举报
文章被收录于专栏:前端达人前端达人
运行总次数:0
代码可运行
表单是现代网页开发的重要组成部分,创建表单通常是一项耗时且繁琐的任务。这就是FormKit的用武之地;它是一个功能强大的现代表单构建库,旨在帮助开发人员轻松高效地创建表单。

在本文中,我们将探讨使用FormKit的好处,并提供一个逐步指南,教你如何使用这个强大的工具构建表单。请继续阅读,了解FormKit如何帮助您简化表单构建过程,更快地构建更好的表单!

FormKit是什么?

FormKit是一个免费、开源的框架,仅适用于Vue 3(如果你使用的是Vue 2,请查看Vue Formulate),旨在为您提供创建生产就绪表单所需的所有工具。安装FormKit后,您将立即获得许多输入类型、通过可序列化JSON模式生成表单、广泛的验证规则以及创建自定义表单输入和自定义现有输入行为的能力。

FormKit并不过多关注您构建的表单的布局或美学 - 这取决于您自己。但是,它确实附带了一个最小的样式主题,您可以用于快速而简单的工作。如果您想详细了解FormKit的功能,请阅读它们的文档。

项目设置

如果您想跟随本指南进行操作,您需要先进行一些设置工作。

你的第一个任务是使用Vite创建一个Vue项目。首先,在终端中导航到你想要项目存放的位置。接下来,运行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm create vite@latest

create-vite 命令会向您提出几个问题。请按照下方截图中的示例进行回答:

然后进入项目文件夹并安装必要的依赖项:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
cd formkit-demo
npm install

接下来,通过运行 npm run dev 启动开发服务器,然后访问localhost:5173以查看您的应用程序。

现在您已经设置好了Vue项目,是时候安装FormKit和默认主题了。打开另一个终端窗口并运行以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npm i @formkit/vue @formkit/themes

你最后的设置任务是清理掉你不需要的样板文件。删除 src/assets 文件夹, src/components/HelloWorld.vue ,和 src/style.css 。此时,你的项目目录应该有以下结构:

将 src/App.vue 的内容替换为一个空模板和脚本,如下所示:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<script setup></script>

<template></template>

然后通过将 src/main.js 的内容替换为以下内容,导入样式并在Vue应用程序中注册Formkit

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { createApp } from "vue";
import { plugin, defaultConfig } from "@formkit/vue";
import "@formkit/themes/genesis";
import App from "./App.vue";

createApp(App).use(plugin, defaultConfig).mount("#app");

设置完成。

使用FormKit构建表单

为了展示使用FormKit构建表单的简易性,您将使用它创建一个预约请求表单,该表单如下所示:

让我们从创建表单容器和标题开始。打开 src/App.vue 并将以下代码放入其中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<template>
  <FormKit
    type="form"
    #default="{ value }"
    form-class="outer-container"
    :config="{
      validationVisibility: 'dirty',
    }"
  >
    <h1>Appointment Request form</h1>
    <h3>Fill out the form below, and we'll be in touch via email</h3>
  </FormKit>
</template>

<style>
.outer-container {
  width: 400px;
  border: 1px solid #e4e4e4;
  padding: 1.5em;
  border-radius: 1em;
  margin: 0 auto 1em auto;
}

.input-group {
  display: flex;
  gap: 1em;
}

h1,
h3 {
  text-align: center;
}
</style>

FormKit有一个独特的功能:所有的表单输入都是使用 <FormKit> 组件创建的。您传递给 <FormKit> 组件的props决定了渲染哪个输入,以及标签和样式等内容。让我们更仔细地看一下 <FormKit> 组件。以下是代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<FormKit
  type="form"
  #default="{ value }"
  form-class="outer-container"
  :config="{
    validationVisibility: 'dirty',
  }"
>

这段代码使用 type 属性来指定组件应该是一个 form 输入框。form-class 属性指定要应用于渲染的输入框的类。validationVisibility: 'dirty' 属性的 config 属性指定当输入值不符合验证规则时,表单输入的任何验证错误都应该立即显示出来。default 插槽非常重要,因为我们稍后可以使用表单输入的值来编写逻辑。

接下来,您将要创建一些表单输入。请在模板中的 <h3> 标签后添加以下代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<div class="input-group">
  <FormKit
    type="text"
    label="First name"
    placeholder="John"
    validation="required|length:3"
  ></FormKit>

  <FormKit
    type="text"
    label="Last name"
    placeholder="Doe"
    validation="required|length:3"
  ></FormKit>
</div>

<FormKit
  type="date"
  label="Date of Birth"
  validation="required|date_before:2023-01-01"
></FormKit>

<div class="input-group">
  <FormKit
    type="text"
    label="Gender"
    placeholder="Your gender"
    validation="required"
  ></FormKit>

  <FormKit
    type="text"
    label="Phone number"
    suffix-icon="telephone"
    placeholder="555-5555-555"
    validation="required"
  ></FormKit>
</div>

这段代码介绍了如何使用FormKit来生成具有 text 和 date 输入的 type 属性。它还展示了验证和图标的工作原理。

当您安装FormKit时,您还会安装一套免费的、MIT许可的图标。您可以通过在输入字段的 prefix-icon 和 suffix-icon 属性中指定图标的名称来在您的表单中使用这些图标。

要对输入应用验证,您需要将一组验证规则(用竖杠“|”分隔)提供给验证属性,并通过冒号(“:”)为每个验证规则提供参数。

添加此代码后,您的表单应该是这样的:

当您填写每个字段时,一旦输入违反验证规则,您将看到显示错误。当您尝试提交表单时,所有剩余的错误都将显示,无论输入值是否已被修改。

接下来,您将编写类似的代码来创建地址和电子邮件地址字段。将以下代码添加到您的模板中:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<FormKit
  type="text"
  label="Address"
  placeholder="21st Random Street"
  validation="required"
></FormKit>

<FormKit
  type="email"
  label="Email address"
  placeholder="JohnDoe@gmail.com"
  suffix-icon="email"
  validation="required|email"
></FormKit>

新字段将显示如下:

为了你的下一个技巧,你将要构建一些新的东西:一个有条件渲染的输入框。如果用户在询问是否有首选医生的单选按钮上选择了“是”,我们希望出现一个文本输入框,询问你想要选择哪位医生。

将以下代码添加到您的模板末尾:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<FormKit
  type="radio"
  label="Do you have a doctor you would prefer to attend to you?"
  name="preferred"
  :options="['Yes', 'No']"
  validation="required"
></FormKit>

<FormKit
  v-if="value.preferred === 'Yes'"
  type="text"
  label="What's the name of this doctor?"
  validation="required"
></FormKit>

这段代码使用默认插槽的 value 对象来访问每个输入字段的值。因此,在后续的输入中,你只需要使用v-if来根据值对象隐藏输入,直到单选按钮的值为“是”。

只剩下一个 select 和一个 date-time 输入框来完成您的表单。像这样添加它们:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<FormKit
  type="select"
  label="Which procedure do you want done?"
  :options="['Check up', 'Result analysis', 'Medical exam']"
  placeholder="Select a procedure"
  validation="required"
></FormKit>

<FormKit
  type="datetime-local"
  label="Preferred appointment date and time"
  validation="required"
></FormKit>

你已经填写完整了!

结束

总之,FormKit为现代Web开发提供了一个强大而灵活的构建表单的解决方案。该库使开发人员能够轻松创建复杂的表单,并具有许多功能和工具来简化表单构建过程。

由于文章内容篇幅有限,今天的内容就分享到这里,文章结尾,我想提醒您,文章的创作不易,如果您喜欢我的分享,请别忘了点赞和转发,让更多有需要的人看到。同时,如果您想获取更多前端技术的知识,欢迎关注我,您的支持将是我分享最大的动力。我会持续输出更多内容,敬请期待。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2023-08-30 08:51,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 前端达人 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
【玩转腾讯云】用eclipse跑通腾讯云JavaSDK
https://www.oracle.com/java/technologies/javase-jdk13-downloads.html
大大大黑白格子
2020/03/27
15.4K0
【玩转腾讯云】用eclipse跑通腾讯云JavaSDK
k8s的持续集成(jenkins+gitlab+k8s)
root@k8s-master1 docker.yml# kubectl get node
不凡
2021/08/19
3.7K1
Maven打包
assembly插件的打包方式是通过descriptor(描述符)来定义的。Maven预先定义好的描述符有bin,src,project,jar-with-dependencies等。比较常用的是jar-with-dependencies,它是将所有外部依赖JAR都加入生成的JAR包中,比较傻瓜化。但要真正达到自定义打包的效果,就需要自己写描述符文件,格式为XML。下面是我们的项目中常用的一种配置。
来自银河系的员程序
2022/01/24
1.4K0
Maven打包
在Mac电脑上用VMware Fusion安装Windows7虚拟机
链接: https://pan.baidu.com/s/1Ov033tnnYl-LoQcJrpU8DA
Action
2021/03/26
3.8K0
在Mac电脑上用VMware Fusion安装Windows7虚拟机
【玩转腾讯云】导入镜像-Windows 2008 R2 Datacenter
【腾讯云】关于Windows Server 2008 R2 企业版 SP1 64位公共镜像下线通知
大大大黑白格子
2020/03/26
10.3K18
【玩转腾讯云】导入镜像-Windows 2008 R2 Datacenter
若依前后台框架,下载运行,若依系统生成代码
1、前置工具安装 jdk 1.8 redis (缓存数据库) mysql idea (后端开发工具) nodejs (js前端开发平台,本文主要用到包管理工具 npm) vscode (前端开发工具) git (版本管理工具) 下载 [https://gitee.com/y\_project/RuoYi-Vue](https://gitee.com/y_project/RuoYi-Vue) 2、运作方式 [image.png] 3、后台导入,设置 [image.png] [image.png] [image
用户7957495
2021/08/09
1.6K0
若依前后台框架,下载运行,若依系统生成代码
excel 的条件格式(三)
在 excel 中,使用色阶可以很方便地对一定区域内单元格的值进行可视化,渐变的颜色表示单元格中值的大小。照着以下步骤,便可以添加色阶。
mr.songw
2021/02/07
2.3K0
excel 的条件格式(三)
Android模仿微博的LazyFragment懒加载
本文会从头开始一步一步带你去写一个LazyFragment,根据写的过程中一步一步记录,你也可以自己试一试,跟着一起写写。最后也根据遇到的问题去完善了,网上搜的都是不完善的,还是自己写一个吧!
分你一些日落
2021/12/08
4710
Android模仿微博的LazyFragment懒加载
2021年度Leetcode算法类型高频题总结&(附答案解析)
昨晚逛了逛GitHub,无意中看到一位P8大佬的算法刷题笔记,感觉发现了宝藏!有些小伙伴可能已经发现了,但咱这里还是忍不住安利一波,怕有些小伙伴没有看到。
Java程序猿
2021/12/24
9460
2021年度Leetcode算法类型高频题总结&(附答案解析)
【技术创作101训练营】- 前后端分离模式下如何保证开发人员不打架?
上传ppt很多颜色被改变了,如果评委老师想看原版的话,可以看pdf,麻烦了,谢谢。
手撕代码八百里
2021/01/20
1K3
【技术创作101训练营】- 前后端分离模式下如何保证开发人员不打架?
MySQL 索引(中)
聚簇索引是按照每张表的主键构造的一棵 B+ 树,叶子节点中存放的即为整张表的行记录数据,聚簇索引的叶子节点也称为数据页。非聚簇索引叶子节点并不包含行记录的全部数据。叶子节点除了包含键值以外,每个叶子节点中的索引行中还包含一个书签。该书签用来告诉 InnoDB 存储引擎哪里可以找到与索引相对应的行数据。由于 InnoDB 存储引擎表是索引组织表,因此 InnoDB 存储引擎的非聚簇索引的书签就是相应的行数据的聚簇索引键。那么基于聚簇索引和非聚簇索引的查询的区别在哪里呢?先通过一个例子来直观感受下:查询 emp_no 为 401060 的记录,通过字段 emp_no 来查询,sql 如下。
mr.songw
2021/01/15
1.5K0
MySQL 索引(中)
竞技世界面试官:说一下公平锁和非公平锁的区别?
上次我们提到了乐观锁和悲观锁,那我们知道锁的类型还有很多种,我们今天简单聊一下,公平锁和非公平锁两口子,以及他们在我们代码中的实践。
Java程序猿
2021/07/18
3840
关于Safari 访问springboot server项目异常问题
后端大哥不作为,埋点数据啥的搞得杂七乱八,自己用springboot 写了一个接受post日志的服务,数据入腾讯云ckafka,消费到elasticsearchhttps://console.cloud.tencent.com/es。(也无聊的用自带的云函数做了个备份将数据copy到了cos对象存储)并在springboot上面加了允许跨域等设置,代码是网上copy来的:
对你无可奈何
2021/02/04
7210
TKE nginx-ingress 开启ip白名单限制和透传client源IP
最近TKE迎来了nginx-ingress 插件的到来,此篇文章将结合TKE nginx-ingress插件,实现IP白名单配置和service透传client源IP的功能
惠绍奇
2020/12/30
4.8K0
MySQL 索引(下)
从结果中看出,索引失效了,这是因为我们需要把索引字段的值都取出来,然后依次进行表达式的计算来进行条件判断,因此采用的就是全表扫描的方式,运行时间也会慢好多。
mr.songw
2021/01/15
6940
MySQL 索引(下)
journalctl命令-系统调试中一个常用的命令
centos7开始j系统使用2个日志服务用于系统日志,一个服务是systemd-journald,这个服务把日志存放到内存中。另一个服务是rsyslogd,它可以从systemd-journald获取日志并把日志存放在磁盘上。journalctl命令主要开始承担了查看日志还有一些日志的配置功能,经常需要用到这个命名去查看日志和设置日志的一些参数。借用他山之石(系统centos7,腾讯云cvm,故日志中会有qcloud ntp还有云监控agent的一些log)总结一下:
对你无可奈何
2021/02/05
3.6K0
安装添加access数据库
access版本目前已经更新出了很多,包括access2016,2010;2019,2021;
用户9693436
2022/04/24
5.4K0
Python完成英雄联盟原话千图成像,这也太酷了
很久前在刷微博的时候看到了这条,被他给震撼到了,图片是由LOL近千张皮肤图片组合构成的(难道这是用ps做的,还是一张张拼的,应该不可能吧),就在昨天突然就想起了这个事,就决定也做一个,随即便展开了行动。搜到了这篇文章,看了下图片的构成,决定先取得所有皮肤的图片再说吧!便又开始了爬虫!
查理不是猹
2021/12/21
3680
Python完成英雄联盟原话千图成像,这也太酷了
利用云函数接收兔小巢的 WebHooks ,并通知到对应邮箱
兔小巢是一款免费的反馈互动社区产品,在网站上插入几行代码即可拥有和腾讯网一样的互动社区,让反馈变得便捷,轻巧。
jwj
2022/03/28
1.9K0
利用云函数接收兔小巢的 WebHooks ,并通知到对应邮箱
protobuf编译、安装和简单使用C++(Windows+VS平台)
将刚才编译后的libprotobufd.lib和protoc.exe拷贝到自己创建的项目下,按住shift+右键,选择打开CMD,输入protoc --cpp_out=./ Account.proto,发现目录中多了两个文件,一个.h头文件一个.cc源文件
WindSun
2020/03/21
8.9K2
推荐阅读
相关推荐
【玩转腾讯云】用eclipse跑通腾讯云JavaSDK
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档