利用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 相关文章推荐
jquery下checked取值问题的解决方法
Aug 09 Javascript
完美解决IE低版本不支持call与apply的问题
Dec 05 Javascript
jQuery绑定事件不执行但alert后可以正常执行
Jun 03 Javascript
JavaScript函数定义的常见注意事项小结
Sep 16 Javascript
JavaScript判断页面加载完之后再执行预定函数的技巧
May 17 Javascript
浅谈addEventListener和attachEvent的区别
Jul 14 Javascript
jQuery复制节点用法示例(clone方法)
Sep 08 Javascript
详谈jQuery.load()和Jsp的include的区别
Apr 12 jQuery
vue-axios使用详解
May 10 Javascript
jquery ajax异步提交表单数据的方法
Oct 27 jQuery
Vue 中axios配置实例详解
Jul 27 Javascript
修改vue源码实现动态路由缓存的方法
Jan 21 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
第五节--克隆
2006/11/16 PHP
mysql 搜索之简单应用
2007/04/27 PHP
PHP使用gmdate实现将一个UNIX 时间格式化成GMT文本的方法
2015/03/19 PHP
php操纵mysqli数据库的实现方法
2016/09/18 PHP
详解Yaf框架PHPUnit集成测试方法
2017/12/27 PHP
PHP abstract 抽象类定义与用法示例
2018/05/29 PHP
php curl获取https页面内容,不直接输出返回结果的设置方法
2019/01/15 PHP
js里的prototype使用示例
2010/11/19 Javascript
3分钟写出来的Jquery版checkbox全选反选功能
2013/10/23 Javascript
JavaScript判断表单中多选框checkbox选中个数的方法
2015/08/17 Javascript
必备的JS调试技巧汇总
2016/07/20 Javascript
jquery操作select取值赋值与设置选中实例
2017/02/28 Javascript
js控制文本框禁止输入特殊字符详解
2017/04/07 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
JavaScript中使用Async实现异步控制
2017/08/15 Javascript
浅谈jquery中ajax跨域提交的时候会有2次请求的问题
2017/11/10 jQuery
微信小程序实现tab页面切换功能
2018/07/13 Javascript
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
Python3.6日志Logging模块简单用法示例
2018/06/14 Python
基于Python函数和变量名解析
2019/07/19 Python
python基于gevent实现并发下载器代码实例
2019/11/01 Python
Python如何获取文件指定行的内容
2020/05/27 Python
windows支持哪个版本的python
2020/07/03 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
10款最佳Python开发工具推荐,每一款都是神器
2020/10/15 Python
python实现excel公式格式化的示例代码
2020/12/23 Python
Python使用tkinter制作在线翻译软件
2021/02/22 Python
html5中为audio标签增加停止按钮动作实现方法
2013/01/04 HTML / CSS
特罗佩亚包官方网站:Tropea
2017/01/03 全球购物
Funko官方商店:源自美国,畅销全球搪胶收藏玩偶
2018/09/15 全球购物
大四毕业生学习总结的自我评价
2013/10/31 职场文书
中秋节活动总结
2014/08/29 职场文书
从事会计工作年限证明
2015/06/23 职场文书
话题作文之关于呼唤
2019/11/29 职场文书
如何获取numpy array前N个最大值
2021/05/14 Python
CSS实现单选折叠菜单功能
2021/11/01 HTML / CSS