一、最近在工作过程中要实现一个搜索模糊匹配功能,考虑到组件的复用,就单独把搜索框抽出来作为一个子组件。在以往的开发中,我一般会在input框中的值变化时向父组件emit一个事件,并带上一些父组件中需要的参数(比如搜索的关键词,或者搜索之后返回的结果)

大概的实现方式如下:

父组件
<template>
<div>
<search @test="getData"></search>
<button @click="submit">提交</button>
</div>
</template>
<script>
import search from '@/components/index/search.vue'
export default {
data() {
return {
keywords: ''
}
},
components: {
search
},
methods: {
getData(val){
this.keywords = val
},
submit() {
console.log('keywords:', this.keywords)
}
}
}
</script> 子组件
<template>
<div>
<input @input="inputChange" type="text" name="keywords">
</div>
</template>
<script>
export default {
props: ['keywords'],
methods: {
inputChange(e) {
this.$emit('test', e.target.value)
}
}
}
</script>

二、这次在实现的时候,我隐约记得在之前看Vue api的时候提到过,给组件添加v-model,就想用这种方式尝试一下,根据官网解释我理解:

v-model这个双向绑定相当于做了两个操作:(1)给当前这个组件添加了一个value属性 (2)给当前这个组件绑定了一个input事件;由此我修改实现方式如下:

父组件:

<template>
<div>
<search v-model="keywords"></search>
<button @click="submit">提交</button>
</div>
</template>
<script>
import search from '@/components/index/search.vue'
export default {
data() {
return {
keywords: ''
}
},
components: {
search
},
methods: {
submit() {
console.log('keywords:', this.keywords)
}
}
}
</script>

子组件:

<template>
<div>
<input :value="value" @input="$emit('input', $event.target.value)" type="text" name="keywords">
</div>
</template>
<script>
export default {
props: ['value']
}
</script>

三、总结:其实两种思路是一样的,都是子组件通过emit事件向父组件传值,但是v-model的形式更直观简单~

Vue——组件上使用v-model的更多相关文章

  1. vue组件上动态添加和删除属性

    1.vue组件上动态添加和删除属性 // 添加 this.$set(this.obj, 'propName', val) // 删除 this.$delete(this.obj, 'propName' ...

  2. vue 学习六 在组件上使用v-model

    其实这个部分应该是属于component,为什么把这玩意单独拿出来呢,原因是它这个东西比较涉及到了vue的事件,以及v-model指令的使用,还是比较综合的.所以就拿出来啦 父组件 <templ ...

  3. webAPP如何实现移动端拍照上传(Vue组件示例)?

    摘要:使用HTML5编写移动Web应用,主要是为了尝试一下“一套代码多处运行”,一个webapp几乎可以不加修改的运行在PC/Android/iOS等上面运行.但是写到现在觉得虽然这种方式弊大于利,不 ...

  4. vue里在自定义的组件上定义的事件

    事件分为原生事件和自定义事件. vue里在自定义的组件上定义的事件,都被认为是自定义事件,必须用$emit()来触发. 这也是子组件向父传值的原理. 如果想作为原生事件,需要在原生事件后面加上.nat ...

  5. vue图片上传组件

    前言:很多项目中都需要用到图片上传功能,而其多处使用的要求,为了避免重复造轮子,让我决定花费一些时间去深入了解,最终封装了一个vue的图片上传组件.现将总结再次,希望有帮助. Layout <d ...

  6. vue 学习七 组件上使用插槽

    我们有时候可能会在组件上添加元素,就像下面那样 <template> <div id="a"> <com1> <p>我是渲染的值&l ...

  7. c#版阿里云oss上传——基于layui、pupload的oss 后端web端直传的vue组件

    废话前言 去年,做项目用到oss上传,度娘上逛了一圈写了个前后端代码结合的c#版oss上传. 今年又要用到oss上传时发现很难复用,复用改动的范围太大,显然这个轮子不合格.于是想了下,花了一天的时间( ...

  8. AntDesign VUE:上传组件图片/视频宽高、文件大小、image/video/pdf文件类型等限制(Promise、Boolean)

    文件大小限制 - Promise checkFileSize(file, rules) { return new Promise((resolve, reject) => { file.size ...

  9. AntDesign VUE:上传组件自定义限制的两种方式(Boolean、Promise)

    AntD上传组件 AntDesign VUE文档 第一种方式 beforeUpload(file) { let isLt = true if (filesSize) { isLt = file.siz ...

随机推荐

  1. 介绍Win7 win8 上Java环境的配置

    ① windows 上的 java 环境搭建:(同时适合xp,vasta,win7,win8,win8.1) ② linux 上的java环境搭建(同时适合linux,unix,mac): 本文主要适 ...

  2. Airbnb React/JSX 编码规范

    Airbnb React/JSX 编码规范 算是最合理的React/JSX编码规范之一了 内容目录 基本规范 Class vs React.createClass vs stateless 命名 声明 ...

  3. 11、testng.xml文件解析

    我们可以从以下几种方式调用testng 用testng.xml ant 命令行 我们本次重点介绍testng.xml,testng.xml 文件来配置测试用例的执行 ,testng.xml 文件可以很 ...

  4. Apache版hadoop编译

    前言  做为大数据入门的基础,hadoop是每个大数据开发人员几乎不可避免的基础,目前hadoop已经发展到3.x.x版本,但当前企业使用的主流还是2.x.x版本,hadoop官网提供了编译后的had ...

  5. java反射机制以及应用

    JAVA反射机制+动态运行编译期不存在的JAVA程序 一.有关JAVA反射 在运行期间,在不知道某个类A的内部方法和属性时,能够动态的获取信息.获取类或对象的方法.属性的功能,称之为反射. 1.相关类 ...

  6. tomcat之redis

    Nginx服务器:[root@nginx ~]# vim /usr/local/nginx/conf/nginx.confupstream tomcat_pool { server 192.168.2 ...

  7. nginx 自启动

    转载:https://www.cnblogs.com/cxscode/p/8262319.html 安装Nginx 下载windows版nginx (http://nginx.org/download ...

  8. 创建maven项目的时候:Could not resolve archetype org.apache.maven.archetypes:maven-archetype-webapp:1.0 from any of the configured repositories. 解决办法

    问题: https://yq.aliyun.com/ziliao/364921      尝试没成功. https://www.aliyun.com/jiaocheng/296712.html   尝 ...

  9. native 之bitmap 保存坑

    之前开发项目的时候遇到几次一键保存二维码,或凭证的需求,但是使用h5 a标签 保存网络图片有些并不支持,于是想到了 使用navite 的bitmap可能会好一些 bitmap js封装后的原生图片对象 ...

  10. c 语言函数分析

    第一个参数为指向线程标识符的指针. 第二个参数用来设置线程属性. 第三个参数是线程运行函数的起始地址. 最后一个参数是运行函数的参数. result = pthread_create(&tid ...