在 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 相关文章推荐
学习YUI.Ext第五日--做拖放Darg&amp;Drop
Mar 10 Javascript
很全的显示阴历(农历)日期的js代码
Jan 01 Javascript
js 分栏效果实现代码
Aug 29 Javascript
jQuery 1.5最新版本的改进细节分析
Jan 19 Javascript
js螺旋动画效果的具体实例
Nov 15 Javascript
js操作输入框提示信息且响应鼠标事件
Mar 25 Javascript
JavaScript 作用域链解析
Nov 13 Javascript
angular.js指令中transclude选项及ng-transclude指令详解
May 24 Javascript
一步快速解决微信小程序中textarea层级太高遮挡其他组件
Mar 04 Javascript
vue框架下部署上线后刷新报404问题的解决方案(推荐)
Apr 03 Javascript
bootstrap+spring boot实现面包屑导航功能(前端代码)
Oct 09 Javascript
vue 实现element-ui中的加载中状态
Nov 11 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防注入代码
2010/04/07 PHP
PHP中引用类型和值类型功能与用法示例
2019/02/26 PHP
Laravel 使用查询构造器配合原生sql语句查询的例子
2019/10/12 PHP
动态改变textbox的宽高的js
2006/10/26 Javascript
ejs v9 javascript模板系统
2012/03/21 Javascript
jQuery Tools Dateinput使用介绍
2012/07/14 Javascript
JavaScript使用setTimeout实现延迟弹出警告框的方法
2015/04/07 Javascript
JS基于ocanvas插件实现的简单画板效果代码(附demo源码下载)
2016/04/05 Javascript
vue.js初学入门教程(1)
2016/11/03 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
原生js封装自定义滚动条
2017/03/24 Javascript
xmlplus组件设计系列之按钮(2)
2017/04/26 Javascript
NodeJs使用Mysql模块实现事务处理实例
2017/05/31 NodeJs
javaScript产生随机数的用法小结
2018/04/21 Javascript
Vue实现本地购物车功能
2018/12/05 Javascript
Node.JS枚举统计当前文件夹和子目录下所有代码文件行数
2019/08/23 Javascript
Vue vm.$attrs使用场景详解
2020/03/08 Javascript
vue制作抓娃娃机的示例代码
2020/04/17 Javascript
Openlayers实现点闪烁扩散效果
2020/09/24 Javascript
python下如何让web元素的生成更简单的分析
2008/07/17 Python
Python 的类、继承和多态详解
2017/07/16 Python
Python编程产生非均匀随机数的几种方法代码分享
2017/12/13 Python
Python中一个for循环循环多个变量的示例
2019/07/16 Python
pytorch实现onehot编码转为普通label标签
2020/01/02 Python
HTML5的革新 结构之美
2011/06/20 HTML / CSS
HTML5之SVG 2D入门11—用户交互性(动画)介绍及应用
2013/01/30 HTML / CSS
Kneipp克奈圃美国官网:德国百年精油配方的传承
2018/02/07 全球购物
Square Off美国/加拿大:世界上最聪明的国际象棋棋盘
2018/12/06 全球购物
美国二手复古奢侈品包包购物网站:LXRandCo
2019/06/18 全球购物
Fox Racing英国官网:越野摩托车和山地自行车服装
2020/02/26 全球购物
祖国在我心中演讲稿600字
2014/05/04 职场文书
捐款倡议书怎么写
2014/05/13 职场文书
关于感恩的歌曲整理(8首)
2019/08/14 职场文书
Go语言特点及基本数据类型使用详解
2022/03/21 Golang
经典《舰娘》游改全新动画预告 预定11月开播
2022/04/01 日漫
vue中控制mock在开发环境使用,在生产环境禁用方式
2022/04/06 Vue.js