利用Vue v-model实现一个自定义的表单组件


Posted in Javascript onApril 27, 2017

功能描述:

通过点击按钮,可以增减购物数量

组件名称是 CouterBtn

最终效果如下

利用Vue v-model实现一个自定义的表单组件

我们使用 vue-cli搭建基本的开发环境,这也是最快的进行 .vue组件开发的方式

对于入口组件  App.vue (可以暂时忽略其他细节,我们的重点是如何写组件)

App.vue

<template>
 <div id="app">
 <h4>这是一个利用 v-model实现的自定义的表单组件</h4>
 <h6>CouterBtn组件的值 <i> {{ btnValue }} </i></h6>
 5. <counter-btn v-model="btnValue"></counter-btn>
 <form class="" action="/add" method="post">
  <!-- 真实情况请将 type改为hidden -->
  <label for="count">值绑定到 input 隐藏域里</label>
  <input type="text" name="count" :value="btnValue.res" id="count">
10. </form>
 </div>
 </template>
 <script>
 import CounterBtn from './components/CouterBtn.vue'
15. export default {
 data() {
  return {
  btnValue: {}
  }
20. },
 components: {
  CounterBtn
 }
 }
25. </script>
 <style lang="stylus">
 h6 i
 border 1px dotted
 form
30. margin-top 20px
 padding 20px
 border 1px dotted #ccc
 label
  vertical-align: middle
35. </style>

下面我来对 App.vue中的一些代码进行一些说明,根据代码行数来说明

4 : 我们使用 {{ btnValue }}来获取自定义组件 counter-btn的值, 这里仅仅是展示效果用 

5: 我们使用了counter-btn ,自定义的组件 

9: 我们将自定义组件的值,绑定到我们的表单组件 input中去, 在真实的情况下, 此 input的类型可能为 hidden类型 

21: 由于我们需要在App.vue组件中使用我们自定义的组件 counter-btn,所以需要使用 components注册组件, 这里还使用了 ES6的对象解构 

26: 我们使用CSS预处理器为stylus, 前提是你的 node_modules中要安装此npm包和loader,vue-cli已经帮我们处理好了stylus的编译; 根据个人情况选择 

我们自己设计的组件通过 v-model,把组件内部的值传给了它所绑定的值

下面我们来看看我们的组件的实现

CounterBtn.vue

<template>
 <div class="coutter-wrapper">
 <button type="button" @click="plus">+</button>
 <button type="button">{{ result }}</button>
5. <button type="button" @click="minus">-</button>
 </div>
 </template>
 <script>
 export default {
10. methods: {
 minus() {
 this.result--;
 this.$emit('input', {res: this.result, other: '--'})
 },
15. plus() {
 this.result++;
 this.$emit('input', {res: this.result, other: '++'})
 }
 },
20. data() {
 return {
 result: 0,
 }
 }
25. }
 </script>
 <style lang="stylus" scoped>
 button
 border 0
30. outline 0
 border-radius 3px
 button:nth-child(2)
 width 200px 
 </style>

我们可以看到组件的实现非常简单, 3个button搞定; 这里最关键的代码是

this.$emit('input', {res: this.result, other: '++'})

通过 触发 input事件和自定的数据来实现把数据暴露给 v-model绑定的属性值

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木

Javascript 相关文章推荐
不要小看注释掉的JS 引起的安全问题
Dec 27 Javascript
基于JQuery的cookie插件
Apr 07 Javascript
javascript获取当前日期时间及其它操作函数
Jan 11 Javascript
JavaScript高级程序设计(第3版)学习笔记13 ECMAScript5新特性
Oct 11 Javascript
js动态移动滚动条至底部示例代码
Apr 24 Javascript
JavaScript正则表达式中的ignoreCase属性使用详解
Jun 16 Javascript
jQuery.form插件的使用及跨域异步上传文件
Apr 27 Javascript
AngularJS基础 ng-src 指令简单示例
Aug 03 Javascript
如何解决IONIC页面底部被遮住无法向上滚动问题
Sep 06 Javascript
Bootstrap Table中的多选框删除功能
Jul 15 Javascript
webpack是如何实现模块化加载的方法
Nov 06 Javascript
Electron 打包问题:electron-builder 下载各种依赖出错(推荐)
Jul 09 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
Apr 26 #Javascript
微信小程序实现给循环列表添加点击样式实例
Apr 26 #Javascript
微信小程序 request接口的封装实例代码
Apr 26 #Javascript
微信小程序中hidden不生效原因的解决办法
Apr 26 #Javascript
微信小程序 flex实现导航实例详解
Apr 26 #Javascript
微信扫码支付零云插件版实例详解
Apr 26 #Javascript
JavaScript实现的冒泡排序法及统计相邻数交换次数示例
Apr 26 #Javascript
You might like
php面向对象全攻略 (三)特殊的引用“$this”的使用
2009/09/30 PHP
php中unlink()、mkdir()、rmdir()等方法的使用介绍
2012/12/21 PHP
linux下编译安装memcached服务
2014/08/03 PHP
php使用cookie实现记住用户名和密码实现代码
2015/04/27 PHP
php 猴子摘桃的算法
2017/06/20 PHP
jquery load事件(callback/data)使用方法及注意事项
2013/02/06 Javascript
JavaScript函数获取事件源的小例子
2014/05/14 Javascript
jquery简单实现幻灯片的方法
2015/08/03 Javascript
jQuery中的AjaxSubmit使用讲解
2016/09/25 Javascript
解决vue router使用 history 模式刷新后404问题
2017/07/19 Javascript
Angular4学习笔记之根模块与Ng模块
2017/09/09 Javascript
BootStrap Table实现server分页序号连续显示功能(当前页从上一页的结束序号开始)
2017/09/12 Javascript
javascript+css3开发打气球小游戏完整代码
2017/11/28 Javascript
浅谈vue的几种绑定变量的值 防止其改变的方法
2018/03/01 Javascript
基于vue v-for 循环复选框-默认勾选第一个的实现方法
2018/03/03 Javascript
详解基于vue-cli3.0如何构建功能完善的前端架子
2018/10/09 Javascript
jQuery利用FormData上传文件实现批量上传
2018/12/04 jQuery
详解vue 兼容IE报错解决方案
2018/12/29 Javascript
ES6知识点整理之对象解构赋值应用示例
2019/04/17 Javascript
Vue前端判断数据对象是否为空的实例
2020/09/02 Javascript
Python中使用语句导入模块或包的机制研究
2015/03/30 Python
python计算圆周率pi的方法
2015/07/11 Python
python3实现斐波那契数列(4种方法)
2019/07/15 Python
pycharm 批量修改变量名称的方法
2019/08/01 Python
Pytorch之保存读取模型实例
2019/12/30 Python
python使用OpenCV模块实现图像的融合示例代码
2020/04/10 Python
浅谈Tensorflow加载Vgg预训练模型的几个注意事项
2020/05/26 Python
Python selenium实现断言3种方法解析
2020/09/08 Python
Python 里最强的地图绘制神器
2021/03/01 Python
Camper鞋西班牙官方网上商店:西班牙马略卡岛的鞋类品牌
2019/03/14 全球购物
如何客观的进行自我评价
2013/12/17 职场文书
高中生评语大全
2014/04/25 职场文书
民主评议教师党员自我评价
2015/03/04 职场文书
严以律己专题学习研讨会发言材料
2015/11/09 职场文书
歌咏比赛口号大全
2015/12/25 职场文书
vue 实现上传组件
2021/05/31 Vue.js