vue-hook-form使用详解


Posted in Javascript onApril 07, 2017

vue-hook-form

用于处理form请求,获取formData。以便于将form请求转成ajax/fetch请求

安装

npm install vue-hook-form

使用

VUE版本:1.x
必须在vue-cli生成的webpack模板环境中使用

一、注册&配置组件

// 这里使用在main.js中全局注册来示例
import vue from 'vue'
import hookForm from 'vue-hook-form'
// 配置全局form表单序列化之前的hook
hookForm.beforeSerialize = (vm, next) => {
 // vm: 对应的hookForm vm实例
 // next:继续执行
 // 你可以在此处执行表单校验
}
// 配置全局form提交前的hook
hookForm.onSubmit = request => {
 // request:包含了本次请求的基本信息
 // 你可以在此处执行表单校验或使用ajax来提交本次请求
}
vue.component('hook-form', hookForm)

Request对象:

{
 url: '请求地址',
 body: '请求参数',
 method: '请求方法',
 vm: '对应的hookForm vm实例'
}

二、vue文件中使用

<template>
 <hook-form action="users" :on-submit="onSubmit" :before-serialize="beforeSerialize">
 <input name="name">
 <input name="age">
 <button>提交</button>
 </hook-form>
</template>
<script>
 export default {
 methods: {
  // 局部hook
  beforeSerialize (vm, next) {
  // next:继续执行
  // 你可以在此处执行表单校验
  },
  onSubmit (request) {
  // request:包含了本次请求的基本信息
  // 你可以在此处执行表单校验或使用ajax来提交本次请求
  }
 }
 }
</script>

配置

onSubmit

form提交前的全局hook。

beforeSerialize

form表单序列化之前的全局hook。一般用于校验表单,但此时无须form表单序列化的时候。也便于在触发onSubmit之前更改form表单内容

json

Request.body是否转成json格式,默认为url字符串。默认:false

hookForm.onSubmit = request => {
 // request.body为url字符串格式
 // 形如:name=张三&age=18
}
// 配置Request.body为json格式
hookForm.json = true
hookForm.onSubmit = request => {
 // request.body为json格式
}

Props

action:请求地址
method:请求方法。默认:post
onSubmit:form提交前的局部hook
beforeSerialize: form表单序列化之前的局部hook
json:Request.body是否转成json格式(优先使用局部json配置)。默认:false
disabled:禁用

关于disabled

你可以通过使用该选项来防止form的多次提交

hookForm.onSubmit = request => {
 // 禁止form提交
 request.vm.disabled = true
 // 在ajax请求或其他相关操作之后再释放禁用。
 doSomeThing()
 .then(() => {
  request.vm.disabled = false
 })
}

常见问题

全局onSubmit中提交了请求,返回了请求。这些操作如何通知到对应的组件?

Request对象中有一个vm属性,这是hookForm组件本身的vue实例。父子组件通信
也就是说hookForm只是扮演form和ajax之间的桥梁,负责传送一下form表单数据。你可以基于它二次封装一个更多功能的form组件

全局hook和局部hook会不会同时触发?

不会。如果存在局部hook,那么优先触发局部,否则才触发全局。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
JavaScript中两个感叹号的作用说明
Dec 28 Javascript
js 获取坐标 通过JS得到当前焦点(鼠标)的坐标属性
Jan 04 Javascript
JavaScript中对象property的删除方法介绍
Dec 30 Javascript
JavaScript File分段上传
Mar 10 Javascript
Bootstrap被封装的弹层
Jul 20 Javascript
AngularJs Understanding the Controller Component
Sep 02 Javascript
详解Weex基于Vue2.0开发模板搭建
Mar 20 Javascript
js移动端图片压缩上传功能
Aug 18 Javascript
vue父组件触发事件改变子组件的值的方法实例详解
May 07 Javascript
Vue 使用计时器实现跑马灯效果的实例代码
Jul 11 Javascript
VSCode写vue项目一键生成.vue模版,修改定义其他模板的方法
Apr 17 Javascript
Jquery 获取相同NAME 或者id删除行操作
Aug 24 jQuery
ES6实现的遍历目录函数示例
Apr 07 #Javascript
如何使用vuejs实现更好的Form validation?
Apr 07 #Javascript
JS实现css hover操作的方法示例
Apr 07 #Javascript
微信小程序 chooseImage选择图片或者拍照
Apr 07 #Javascript
微信小程序page的生命周期和音频播放及监听实例详解
Apr 07 #Javascript
JavaScript使用链式方法封装jQuery中CSS()方法示例
Apr 07 #jQuery
jQuery中map函数的两种方式
Apr 07 #jQuery
You might like
PHP中根据IP地址判断城市实现城市切换或跳转代码
2012/09/04 PHP
php文件上传的例子及参数详解
2013/12/12 PHP
ThinkPHP3.2.3框架Memcache缓存使用方法实例总结
2019/04/15 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
如何用javascript去掉字符串里的所有空格
2007/02/08 Javascript
Javascript 实用小技巧
2010/04/07 Javascript
判断JS对象是否拥有某种属性的两种方式
2013/12/02 Javascript
JavaScript中string转换成number介绍
2014/12/31 Javascript
javascript中scrollTop详解
2015/04/13 Javascript
每天一篇javascript学习小结(面向对象编程)
2015/11/20 Javascript
jQuery实现控制文字内容溢出用省略号(…)表示的方法
2016/02/26 Javascript
jQuery焦点图左右转换效果
2016/12/12 Javascript
JS与jQuery实现子窗口获取父窗口元素值的方法
2017/04/17 jQuery
bmob js-sdk 在vue中的使用教程
2018/01/21 Javascript
Element DateTimePicker日期时间选择器的使用示例
2020/07/27 Javascript
以windows service方式运行Python程序的方法
2015/06/03 Python
定制FileField中的上传文件名称实例
2017/08/23 Python
分分钟入门python语言
2018/03/20 Python
django框架之cookie/session的使用示例(小结)
2018/10/15 Python
python3反转字符串的3种方法(小结)
2019/11/07 Python
Python 实现try重新执行
2019/12/21 Python
Python字符串中删除特定字符的方法
2020/01/15 Python
python matplotlib包图像配色方案分享
2020/03/14 Python
美国庭院家具购物网站:AlphaMarts
2019/04/10 全球购物
大学军训自我鉴定
2013/12/15 职场文书
小学生秋游活动方案
2014/02/23 职场文书
四议两公开实施方案
2014/03/28 职场文书
奥巴马胜选演讲稿
2014/05/15 职场文书
物理教育专业求职信
2014/06/25 职场文书
安全保卫工作竞聘材料
2014/08/25 职场文书
Mysql 如何批量插入数据
2021/04/06 MySQL
Go缓冲channel和非缓冲channel的区别说明
2021/04/25 Golang
Oracle11g R2 安装教程完整版
2021/06/04 Oracle
《战锤40K:暗潮》跳票至9月 公布新宣传片
2022/04/03 其他游戏
springboot集成redis存对象乱码的问题及解决
2022/06/16 Java/Android
MySQL实现字段分割一行转多行的示例代码
2022/07/07 MySQL