利用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 相关文章推荐
JQUBar 基于JQUERY的柱状图插件
Nov 23 Javascript
用Jquery.load载入页面实现局部刷新
Jan 22 Javascript
jQuery中scrollTop()方法用法实例
Jan 16 Javascript
JavaScript通过select动态更换图片的方法
Mar 23 Javascript
深入理解JavaScript编程中的同步与异步机制
Jun 24 Javascript
JavaScript实现为input与textarea自定义hover,focus效果的方法
Aug 21 Javascript
使用javascript插入样式
Mar 14 Javascript
详解handlebars+require基本使用方法
Dec 21 Javascript
基于JavaScript实现的快速排序算法分析
Apr 14 Javascript
vue.js中过滤器的使用教程
Jun 08 Javascript
利用JavaScript如何查询某个值是否数组内
Jul 30 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
May 18 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调用Java对象的方法
2006/10/09 PHP
Win9x/ME下Apache+PHP安装配置
2006/10/09 PHP
基于initPHP的框架介绍
2013/04/18 PHP
php强制文件下载而非在浏览器打开的自定义函数分享
2014/05/08 PHP
PHP面向对象多态性实现方法简单示例
2017/09/27 PHP
PHP实现的数组和XML文件相互转换功能示例
2018/03/15 PHP
PHP商品秒杀问题解决方案实例详解【mysql与redis】
2019/07/22 PHP
基于php伪静态的实现方法解析
2020/07/31 PHP
jquery 插件 人性化的消息显示
2008/01/21 Javascript
jQuery ajax serialize()方法的使用以及常见问题解决
2013/01/27 Javascript
javascript 禁用IE工具栏,导航栏等等实现代码
2013/04/01 Javascript
处理及遍历XML文档DOM元素属性及方法整理
2013/08/23 Javascript
jquery做的一个简单的屏幕锁定提示框
2014/03/26 Javascript
在线所见即所得HTML编辑器的实现原理浅析
2015/04/25 Javascript
jquery实现简单的轮换出现效果实例
2015/07/23 Javascript
JS动态给对象添加事件的简单方法
2016/07/19 Javascript
jQuery学习之DOM节点的插入方法总结
2017/01/22 Javascript
jQuery中Chosen三级联动功能实例代码
2017/03/07 Javascript
jQuery plugin animsition使用小结
2017/09/14 jQuery
详解webpack引入第三方库的方式以及注意事项
2019/01/15 Javascript
javascript之分片上传,断点续传的实际项目实现详解
2019/09/05 Javascript
js实现图片无缝循环轮播
2019/10/28 Javascript
详解JavaScript 高阶函数
2020/09/14 Javascript
Python urlopen()函数 示例分享
2014/06/12 Python
Python端口扫描简单程序
2016/11/10 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python实现登录与注册系统
2020/11/30 Python
HTML5 通过Vedio标签实现视频循环播放的示例代码
2020/08/05 HTML / CSS
英国花园药房: The Garden Pharmacy
2017/12/28 全球购物
英国女性运动服品牌:Sweaty Betty
2018/11/08 全球购物
先进个人事迹材料
2014/01/25 职场文书
2015年加油站站长工作总结
2015/05/27 职场文书
小马王观后感
2015/06/11 职场文书
python如何进行基准测试
2021/04/26 Python
Python字典和列表性能之间的比较
2021/06/07 Python
漫画「狩龙人拉格纳」公开TV动画预告图
2022/03/22 日漫