本篇写给第一次用VUE写输入框组件的朋友们

正常情况我们vue2.0是怎么样取到input框的值的呢?

很简单只需要给input框设置v-model="val"

我们就能从data里的val里面实时取到当前输入框的值

但是我们如果直接用v-model 给组件绑定上一个val,如果不做任何处理,我们是拿不到组件中的input的值的

如何才能拿到组件中Input的值,并双向绑定?

首先我们得来了解一下v-model是什么,在vue2.0的文档中v-model是用来双向绑定表单元素数据的

v-model 其实是一个语法糖,把v-model=“val”拆分开

可以看做是 :value="val"  @input="val = $event.target.value"

  1. <input v-model="val" />
  2. <input @input="val=$event.target.value" :value="val"/>

以上两行代码的效果是一样的。

在明白了v-model的原理之后我们就可以愉快的使用v-model来绑定我们组件输入框的数据了

我们现在有一个输入框组件<My-input/>

那么想直接利用v-model来取到My-input里面的值应该怎么做呢?

My-input的代码

  1. <div>
  2. <input type="text" />
  3. </div>

在我们使用组建的时候如果直接这么写<My-input v-model="val" />

显然这样是不可行的

因为组件再渲染过后的dom根节点是div 试问给div加了v-model怎么可能能取到值呢?

所以我们可以改写组件的代码

原理是这样的v-model 中有一个@input事件 有一个子组件传值:value

所以我们可以在组件My-input中监听@input事件 ,并且事实改变子组件的value值

在子组件触发@input事件之后向父组件的@input事件传值这样做就可以通过v-model双向绑定输入框组件的值了

组件代码如下:

  1. <div>
  2. <input :value="value" @input="handelChange"type="text"/>
  3. </div>

JS部分

  1. export default {
  2. data() {
  3. return {
  4. val: this.value
  5. };
  6. },
  7. props: {
  8. value: {
  9. type: '',
  10. default:''
  11. }
  12. },
  13. methods: {
  14. handelChange(event) {
  15. let val = event.target.value;
  16. this.val = val;
  17. }
  18. },
  19. //监听子组件的val变化
  20. watch: {
  21. val: function(val) {
  22. //向父级的input事件传值
  23. this.$emit("input", val);
  24. }
  25. }
  26. };

父级元素使用

  1. <My-input v-model="text" />

vue爬坑之input组件的更多相关文章

  1. Vue 爬坑之路(九)—— 用正确的姿势封装组件

    迄今为止做的最大的 Vue 项目终于提交测试,天天加班的日子终于告一段落... 在开发过程中,结合 Vue 组件化的特性,开发通用组件是很基础且重要的工作 通用组件必须具备高性能.低耦合的特性 为了满 ...

  2. Vue 爬坑之路(六)—— 使用 Vuex + axios 发送请求

    Vue 原本有一个官方推荐的 ajax 插件 vue-resource,但是自从 Vue 更新到 2.0 之后,官方就不再更新 vue-resource 目前主流的 Vue 项目,都选择 axios ...

  3. Vue 爬坑之路(一)—— 使用 vue-cli 搭建项目

    vue-cli 是一个官方发布 vue.js 项目脚手架,使用 vue-cli 可以快速创建 vue 项目,GitHub地址是:https://github.com/vuejs/vue-cli vue ...

  4. Vue 爬坑之路(十二)—— vue-cli 3.x 搭建项目

    Vue Cli 3 官方文档:https://cli.vuejs.org/zh/guide/ 一.安装 @vue/cli 更新到 3.x 之后,vue-cli 的包名从 vue-cli 改成了 @vu ...

  5. Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

    使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生. 官方文档: https://router.vue ...

  6. 细数vue爬坑之路<坑路大集合>

    坑爹集锦一: npm出现Newline required at end of file but not found错误 原因:eslint语法错误(vue为后缀名的组件结尾没有换行) 解决办法:在结尾 ...

  7. (转)Vue 爬坑之路(三)—— 使用 vue-router 跳转页面

    使用 Vue.js 做项目的时候,一个页面是由多个组件构成的,所以在跳转页面的时候,并不适合用传统的 href,于是 vue-router 应运而生. 官方文档: https://router.vue ...

  8. Vue 爬坑之路(二)—— 组件之间的数据传递

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...

  9. (转)Vue 爬坑之路(二)—— 组件之间的数据传递

    Vue 的组件作用域都是孤立的,不允许在子组件的模板内直接引用父组件的数据.必须使用特定的方法才能实现组件之间的数据传递. 首先用 vue-cli 创建一个项目,其中 App.vue 是父组件,com ...

随机推荐

  1. ElasticSearch 索引查询使用指南

    1.检测集群是否健康,我们通常用下面的命令.确保9200端口号可用: http://localhost:9200/_cat/health?v 或者 http://localhost:9200/_clu ...

  2. kubeadm 安装k8s

    环境要求: 机器名 ip地址 cpu和内存要求 kubernetes-master 10.0.0.11 2c2g(关闭swap) kubernetes-node1 10.0.0.12 2c2g(关闭s ...

  3. Mysql集群和主从

    1.Mysql cluster: share-nothing,分布式节点架构的存储方案,以便于提供容错性和高性能. 需要用到mysql cluster安装包,在集群中的每一个机器上安装. 有三个关键概 ...

  4. 2018今日头条湖北省赛【H】

    [题目链接]https://www.nowcoder.com/acm/contest/104/G 现场赛的H题,emmm...C++选手表示很伤心.高精度压四位板子WA四发. 题意很简单就是给你n个数 ...

  5. python接口自动化(get请求)

    python接口自动化(get请求) get请求的目的:查询资源 一.导包 二.请求的URL 三.请求的参数 四.获取请求的URL 五.获取响应的状态码 六.获取响应的本文信息 #导包 import ...

  6. idea在ssm项目中引入本地的jar

    在对应的lib下,右键找到add...,即可

  7. oracle中的decode函数的使用

    含义解释:decode(条件,值1,返回值1,值2,返回值2,...值n,返回值n,缺省值) 该函数的含义如下:IF 条件=值1 THEN RETURN(翻译值1)ELSIF 条件=值2 THEN R ...

  8. MD5/SHA1/Hmac_SHA1

    1.MD5 #import <CommonCrypto/CommonDigest.h> + (NSString *) md5:(NSString *) input { const char ...

  9. ld.so和ld-linux.so* :动态链接器/加载器(转)

    概述 动态链接器可以被正在运行的动态链接程序或者动态对象(没有对动态链接器指定命令选项,动态链接器被存储在程序的.interp区域)间接调用,也可以直接运行程序, 例如:/lib/ld-linux.s ...

  10. VC++ MFC文件的移动复制删除更名遍历操作

    1.判断文件是否存在 利用CFile类和CFileStatus类判断 CFileStatus filestatus; if (CFile::GetStatus(_T("d://softist ...