在 Vue 应用中使用 Netlify 表单功能的方法详解


Posted in Javascript onJune 03, 2019

Netlify 带有内置表单处理功能,可以用来存储表单数据,下载 csv 文件,同时可以在接收到新的提交时发送邮件通知或者通过配置 webhook 发送请求。

它是通过在部署应用时直接解析 HTML 文件,识别 html 中的 form 标签来实现的,本文记录如何在一个 Vue 应用中使用表单功能。

开发

首先使用@vue/cli 新建一个 Vue 应用,完成一系列步骤后,运行应用

vue create my-awesome-app
...
yarn serve

创建一个 form 表单

<!--
 data-netlify="true" 表明使用 form 功能
 netlify-honeypot="bot-field" 指定机器人识别字段
 -->
<template>
 <form
 id="app"
 method="POST"
 name="contact"
 data-netlify="true"
 netlify-honeypot="bot-field"
 @submit.prevent="handleSubmit"
 >
 <input name="bot-field" hidden>
 <label for="username">
  用户名:
  <input
  type="text"
  id="username"
  placeholder="请输入你的用户名"
  name="username"
  v-model="form.username"
  >
 </label>
 <label for="email">
  邮箱:
  <input type="email" id="email" placeholder="请输入你的邮箱" name="email" v-model="form.email">
 </label>
 <button type="submit">Submit</button>
 </form>
</template>

注意应用的根节点一定要保留 id=''app" 属性,否则经过静态化之后页面上绑定的事件会失效

在 form 标签上监听 submit 事件,并且阻止浏览器默认事件,使用 axios 提交 post 请求

yarn add axios

handleSubmit() {
 axios
 .post(
  "/",
  this.encode({
  "form-name": "contact", // 请求数据一定要加上 form-name 属性
  ...this.form
  }),
  {
  header: { "Content-Type": "application/x-www-form-urlencoded" }
  }
 )
 .then(() => {
  alert("提交成功");
 })
 .catch(() => {
  alert("提交失败");
 });
}

安装预渲染插件 prerender-spa-plugin github.com/chrisvfritz… ,作用是静态化 Vue 应用,一定要预渲染 Vue 应用,因为如果是通过 js 渲染的页面, Netlify 是解析不到 form 表单的

yarn add prerender-spa-plugin --dev

新建一个 vue.config.js 文件用来扩展  webpack 配置

const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')

module.exports = {
 configureWebpack: () => {
 if (process.env.NODE_ENV !== 'production') return
 return {
  plugins: [
  new PrerenderSPAPlugin({
   staticDir: path.join(__dirname, 'dist'),
   routes: ['/']
  })
  ]
 }
 }
}

完整代码如下

<template>
 <!--
 data-netlify="true" 表明使用 form 功能
 netlify-honeypot="bot-field" 指定机器人识别字段
 -->
 <form
 id="app"
 method="POST"
 name="contact"
 data-netlify="true"
 netlify-honeypot="bot-field"
 @submit.prevent="handleSubmit"
 >
 <input name="bot-field" hidden>
 <label for="username">
  用户名:
  <input
  type="text"
  id="username"
  placeholder="请输入你的用户名"
  name="username"
  v-model="form.username"
  >
 </label>
 <label for="email">
  邮箱:
  <input type="email" id="email" placeholder="请输入你的邮箱" name="email" v-model="form.email">
 </label>
 <button type="submit">Submit</button>
 </form>
</template>

<script>
import axios from "axios";

export default {
 name: "app",
 data() {
 return {
  form: {
  username: "",
  email: ""
  }
 };
 },
 methods: {
 encode(data) {
  return Object.keys(data)
  .map(
   key => `${encodeURIComponent(key)}=${encodeURIComponent(data[key])}`
  )
  .join("&");
 },
 handleSubmit() {
  axios
  .post(
   "/",
   this.encode({
   "form-name": "contact",
   ...this.form
   }),
   {
   header: { "Content-Type": "application/x-www-form-urlencoded" }
   }
  )
  .then(() => {
   alert("提交成功");
  })
  .catch(() => {
   alert("提交失败");
  });
 }
 }
};
</script>

<style>
#app {
 font-family: "Avenir", Helvetica, Arial, sans-serif;
 -webkit-font-smoothing: antialiased;
 -moz-osx-font-smoothing: grayscale;
 text-align: center;
 color: #2c3e50;
 margin-top: 60px;
}
label {
 display: block;
}
</style>

部署

在 Github 上新建一个仓库,上传代码,之后在 Netlify 上点击 New site form Git,进行授权,完成授权后选择要部署的项目仓库

在 Vue 应用中使用 Netlify 表单功能的方法详解 

 填写构建命令,点击 Deploy site 按钮

在 Vue 应用中使用 Netlify 表单功能的方法详解 

 经过一段时间的等待,不出意外应用就部署成功了地址 

在 Vue 应用中使用 Netlify 表单功能的方法详解 

注意在提交数据中一定要有 form-name 属性,否则 Netlify 会接收不到数据,返回 404 错误

在 Vue 应用中使用 Netlify 表单功能的方法详解 

 输入测试数据,点击提交就可以在 Netlify 的站点操作面板看到数据了

 在 Vue 应用中使用 Netlify 表单功能的方法详解

总结

以上所述是小编给大家介绍的在 Vue 应用中使用 Netlify 表单功能的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js验证表单第二部分
Nov 25 Javascript
js正则表达式的使用详解
Jul 09 Javascript
js综合应用实例简单的表格统计
Sep 03 Javascript
js的正则test,match,exec详细解析
Jan 29 Javascript
影响jQuery使用的14个方面
Sep 01 Javascript
JS代码实现根据时间变换页面背景效果
Jun 16 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
基于rollup的组件库打包体积优化小结
Jun 18 Javascript
vue-test-utils初使用详解
May 23 Javascript
通过实践编写优雅的JavaScript代码
May 30 Javascript
弱类型语言javascript开发中的一些坑实例小结【变量、函数、数组、对象、作用域等】
Aug 07 Javascript
JS原型对象操作实例分析
Jun 06 Javascript
JavaScript之数组扁平化详解
Jun 03 #Javascript
JavaScript从原型到原型链深入理解
Jun 03 #Javascript
生产制造追溯系统之再说条码打印
Jun 03 #Javascript
VUE安装使用教程详解
Jun 03 #Javascript
教你完全理解ReentrantLock重入锁
Jun 03 #Javascript
生产制造追溯系统之在线打印功能
Jun 03 #Javascript
产制造追溯系统之通过微信小程序实现移动端报表平台
Jun 03 #Javascript
You might like
PHP编译安装中遇到的两个错误和解决方法
2014/08/20 PHP
Mootools 1.2教程 函数
2009/09/15 Javascript
利用javascript判断文件是否存在
2013/12/31 Javascript
利用jquery操作Radio方法小结
2014/10/20 Javascript
JavaScript版的TwoQueues缓存模型
2014/12/29 Javascript
JavaScript日期时间与时间戳的转换函数分享
2015/01/31 Javascript
javascript实现数字倒计时特效
2016/03/30 Javascript
深入理解JavaScript中的浮点数
2016/05/18 Javascript
jquery遍历table的tr获取td的值实现方法
2016/05/19 Javascript
详解JavaScript中|单竖杠运算符的使用方法
2016/05/23 Javascript
js鼠标按键事件和键盘按键事件用法实例汇总
2016/10/03 Javascript
js 文字超出长度用省略号代替,鼠标悬停并以悬浮框显示实例
2016/12/06 Javascript
Javascript基础回顾之(一) 类型
2017/01/31 Javascript
footer定位页面底部(代码分享)
2017/03/07 Javascript
微信小程序组件之srcoll-view的详解
2017/10/19 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
vue动态设置img的src路径实例
2018/09/18 Javascript
使用angularjs.foreach时return的问题解决
2018/09/30 Javascript
详解vue项目中调用百度地图API使用方法
2019/04/25 Javascript
JavaScript实现网页动态生成表格
2020/11/25 Javascript
Python黑魔法Descriptor描述符的实例解析
2016/06/02 Python
python实现石头剪刀布小游戏
2021/01/20 Python
Python numpy数组转置与轴变换
2019/11/15 Python
Python GUI库Tkiner使用方法代码示例
2020/11/27 Python
X/HTML5 和 XHTML2
2008/10/17 HTML / CSS
加拿大票务网站:Ticketmaster加拿大
2017/07/17 全球购物
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
东南亚冒险旅行与活动:Adventoro
2019/10/16 全球购物
电子商务个人职业生涯规划范文
2014/02/12 职场文书
大学开学计划书
2014/04/30 职场文书
心理咨询承诺书
2014/05/20 职场文书
会计系毕业生求职信
2014/05/28 职场文书
乡镇八一建军节活动方案
2014/08/24 职场文书
党旗在我心中演讲稿
2014/09/15 职场文书
2015秋季开学典礼主持词
2015/07/16 职场文书
Mysql外键约束的创建与删除的使用
2022/03/03 MySQL