利用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代码的实现一个图片向上滚动切换
Sep 02 Javascript
深入理解JavaScript是如何实现继承的
Dec 12 Javascript
Javascript 拖拽的一些高级的应用(逐行分析代码,让你轻松了拖拽的原理)
Jan 23 Javascript
JS往数组中添加项性能分析
Feb 25 Javascript
Jquery代码实现图片轮播效果(一)
Aug 12 Javascript
js图片翻书效果代码分享
Aug 20 Javascript
WordPress中鼠标悬停显示和隐藏评论及引用按钮的实现
Jan 12 Javascript
详解vue-cli 接口代理配置
Dec 13 Javascript
vuejs项目打包之后的首屏加载优化及打包之后出现的问题
Apr 01 Javascript
微信小程序--特定区域滚动到顶部时固定的方法
Apr 28 Javascript
js实现时钟定时器
Mar 26 Javascript
vue实现购物车的小练习
Dec 21 Vue.js
详解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
2.PHP入门
2006/10/09 PHP
一些需要禁用的PHP危险函数(disable_functions)
2012/02/23 PHP
PHP基本语法总结
2014/09/06 PHP
java模拟PHP的pack和unpack类
2016/04/13 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
PHP检查网站是否宕机的方法示例
2017/07/24 PHP
thinkPHP5分页功能实现方法分析
2017/10/25 PHP
九种js弹出对话框的方法总结
2013/03/12 Javascript
jQuery(js)获取文字宽度(显示长度)示例代码
2013/12/31 Javascript
使表格的标题列可左右拉伸jquery插件封装
2014/11/24 Javascript
Grunt入门教程(自动任务运行器)
2015/08/06 Javascript
跟我学习JScript的Bug与内存管理
2015/11/18 Javascript
分享JavaScript与Java中MD5使用两个例子
2015/12/23 Javascript
Node.js中JavaScript操作MySQL的常用方法整理
2016/03/01 Javascript
Bootstrap~多级导航(级联导航)的实现效果【附代码】
2016/03/08 Javascript
jquery对dom节点的操作【推荐】
2016/04/15 Javascript
AngularJS ng-app 指令实例详解
2016/07/30 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
Bootstrap选项卡动态切换效果
2016/11/28 Javascript
JavaScript奇技淫巧44招【实用】
2016/12/11 Javascript
Bootstrap按钮组实例详解
2017/07/03 Javascript
详谈表单重复提交的三种情况及解决方法
2017/08/16 Javascript
node文字生成图片的示例代码
2017/10/26 Javascript
详解Vue CLI3 多页应用实践和源码设计
2018/08/30 Javascript
vue v-for循环重复数据无法添加问题解决方法【加track-by='索引'】
2019/03/15 Javascript
说说Vuex的getters属性的具体用法
2019/04/15 Javascript
JS实现按比例缩小图片宽高
2020/08/24 Javascript
1分钟快速生成用于网页内容提取的xslt
2018/02/23 Python
Django框架自定义模型管理器与元选项用法分析
2019/07/22 Python
python+selenium实现12306模拟登录的步骤
2021/01/21 Python
韩国最大的购物网站:Gmarket
2019/06/20 全球购物
企业项目策划书
2014/01/11 职场文书
会计辞职信范文
2014/01/15 职场文书
天那边观后感
2015/06/09 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
单位车辆管理制度
2015/08/05 职场文书