需求是这样的,需要输入这样一个列表的数据,可以手动添加行,每一行中客户编号跟客户姓名是自动关联的,就是说选取了客户姓名之后,客户编号是自动填充的,客户姓名是一个独立的组件,每一个下拉项都是一个大的对象,里面包含客户的所有信息,通过下拉列表可以获取客户姓名,但是一旦选取之后,客户姓名这个字段就固定了,即为客户的id,所以想通过<template slot-scope="scope">{{scope.row.XXX}}</template>这种方式是拿不到的,然后想通过value-key的形式呢,发现这个已经封装好的组件中还不支持折中value-key的方式,只有下拉列表选择发生变化时,触发change事件,this.$emit('select', item),那么在父组件中通过接收事件,就可以获取item,是这样的:

<el-table-column prop="patientid" label="客户姓名">
<template slot-scope="scope">
<span v-if="id">{{scope.row.patientName}}</span>
<template v-else>
<ever-patient-select @select="selectPatient(item)" v-model="scope.row.patientid"></ever-patient-select>
</template>
</template>
</el-table-column>

但是问题来了,由于table有多行,如何知道事件发生在哪一行,然后修改对应的行的客户编号呢?我们知道table中可以传入scope.$index,来标记行,然后修改table的data[index].patientCode就可以了,但是问题就在于如果直接将$index放进函数,@select="selectPatient($index,item)"或是这样@select="selectPatient(item,$index)",你会发现都不好使,都会影响子组件向外传递他的item值,

那么有没有方法,既不影响子组件向外传递的值,又可以在函数中添加自己的额外参数呢,经过一番查找,发现是可以的,可以这样写@select="selectPatient($event, $index)",然后在处理函数中第一个参数就是子组件传出的item的对象值,第二个就是index标识。

目的达到了,需求也完成了,那么我们不禁要问,这个$event究竟是个什么东东呢?

去官网查找,找到了这样一个例子:

/*************2018-12-03**************/

到这里本以为结束了,发现一个问题,如果子组件想传多个参数出来,比如$emit("change", arg1,arg2,...),使用$event是否依然可以代表子组件传出来的值?经过测试,发现如果如父组件中依然使用@select="selectPatient($event, $index)"这样的写法,发现$event只代表第一个参数arg1,所以这样的话,可以能子组件就要改变写法了,把所有参数包装成一个对象,$event就可以传过来了。

Vue中父组件使用子组件的emit事件,获取emit事件传出的值并添加父组件额外的参数进行操作的更多相关文章

  1. layui获取子集表单中的值,关闭父级弹窗

    js代码 var GetParams = function(url,bool) { try { if(bool){ var index = url.indexOf('?'); url = url.ma ...

  2. vue中eventbus被多次触发(vue中使用eventbus踩过的坑)【bus.$on事件被多次绑定】

    问题描述:只要页面没有强制刷新,存在组件切换,bus.$on方法会被多次绑定,造成事件多次触发   触发bus.$on中绑定的方法.png   bus.$on多次绑定.png 解决办法:在每次调用方法 ...

  3. layer父界面调用子弹窗的方法和获取子弹窗的元素值总结

    layer.open({ type: 2 ,title: false //不显示标题栏 ,closeBtn: false ,area: ['460px', '45%'] ,shade: 0.5 ,id ...

  4. vue中使用watch函数,当数据改变时自动引发事件

    本来我的需求是这样的,使用ElementUI的日期选择器,当日期选择器被更改时需要根据新日期来向服务器获取新数据,但是发现这个日期选择器没有change事件,后来终于发现vue有个watch函数就是用 ...

  5. vue单文件组件形成父子(子父)组件之间通信(vue父组件传递数据给子组件,子组件传递数据给父组件)

    看了很多文章,官网文档也有看,对父子组件通信说的不是很明白:决定自己总结一下: vue一般都使用构建工具构建项目:这样每个组件都是单文件组件:而网上很多文章都是script标签方式映入vue,组件通信 ...

  6. vue-父组件向子组件传值

    一.父组件向子组件传值 其实该问题是说子组件如何访问父组件的属性和方法?那么根据对组件化的理解,无非就是要解决两个问题: 1.父组件如何将值传给子组件? 2.子组件如何获取父组件传递过来的值? 解读v ...

  7. artdialog4.1.7 中父页面给子页面传值

    artdialog4.1.7中父页面给子页面传值时看了一些网友的解决方法: 在父页面声明全局变量 var returnValue=“ ”,子页面用art.dialog.opener.returnVal ...

  8. 基于iscroll的better-scroll在vue中的使用

    什么是 better-scroll better-scroll 是一个移动端滚动的解决方案,它是基于 iscroll 的重写,它和 iscroll 的主要区别在这里.better-scroll 也很强 ...

  9. better-scroll在vue中的坑

    在我们日常的移动端项目开发中,处理滚动列表是再常见不过的需求了,以滴滴为例,可以是这样竖向滚动的列表,如图所示: 也可以是横向滚动的导航栏,如图所示: 可以打开“微信 —> 钱包—>滴滴出 ...

随机推荐

  1. 基于开源串口调试助手修改的qcom

    代码已上传码云: https://gitee.com/fensnote/qcom.git 源代码用于串口编程的学习很有价值,谢谢Qter的开源项目,感谢花心萝卜工作室的修改版本. 开源的qt开发的串口 ...

  2. LinuX操作系统基础------>软件的安装方式,chmod权限,vi编辑器的使用

    RPM包管理 -rpm命令管理 RPM包管理 -yum在线管理 文件权限管理 vi编辑器的使用和常用的快捷键 1.RPM包管理: 一种用于互联网下载包的打包及安装工具,RPM包管理分为rpm命令管理和 ...

  3. 解决CocoaPods could not find compatible versions for pod "React/Core"

    react-native框架中,在ios文件夹下执行pod install命令时出现的问题. 下面时完整的异常信息: [!] CocoaPods could not find compatible v ...

  4. Linux下C++提示bind:address already in use

    此地址下的此端口被占用,有可能你已经关闭了程序依然如此,因为TCP的TIME_WAIT(不懂的话可以可以查一查).解决方案:1.设置为SO_REUSEADDR 2.查看进程进程号(ps -ef 或者 ...

  5. 题解 SGU294 He's Circles

    题目描述 失踪人口回归 根据\(Polya\)定理$$ans=\frac 1n \sum\limits_{i=1}^n2^{gcd(i, n)}$$ 考虑枚举\(gcd\),原式变成$$\frac 1 ...

  6. Name jms can't bind to context问题解决

    需要把gis-datamanage包中的配置test改成compile

  7. 解决React路由跳转时出现的红色警告: Warning: Failed prop type: Invalid prop `component` of type `object` supplied to `Route`, expected `function`.

    一.报警如图: 二.查找路由版本 我使用路由版本是4.3.1的,然后我测试所有4.0+版本都会出现以上警告. 三.未解决前的代码 三.我又解读了一下报警告内容的大致意思:就是props需要通过函数返回 ...

  8. 理解正向代理&反向代理

    通常的代理服务器,只用于代理内部网络对Internet的连接请求,客户机必须指定代理服务器,并将本来要直接发送到Web服务器上的http请求发送到代理服务器中.由于外部网络上的主机并不会配置并使用这个 ...

  9. Newbe.Claptrap 框架如何实现在多种框架之上运行?

    Newbe.Claptrap 框架如何实现在多种框架之上运行?最近整理了一下项目的术语表.今天就谈谈什么是 Claptrap Box. 特别感谢 kotone 为本文提供的校对建议! Newbe.Cl ...

  10. Android studio 在项目里配置签名 + cmd命令安装apk在测试机

    一.在项目里配置签名 搜索百度里有很多可视化操作在项目里配置签名,但是对于已经有签名的旧项目来说,用语句是最方便的. 方法: 第一步:把签名文件放到项目中,和build.gradle的同一级目录下.当 ...