比如el-upload中的 :on-success= fn,其实是给组件el-upload传递一个prop,这样写的话fn只能接受upload组件规定的参数,如果想自己传递父组件中的参数比如b,要写成:on-success= ()=>{fn2(b)}

原理要从Vue的render函数的生成讲起

第一种情况:v-bind,绑定普通方法

<child :trans_method="test">点击</child>

它的父元素的render函数是这样的:

ƒ anonymous(
) {
with(this){return _c('div',{attrs:{"id":"app"}},[_c('child',{attrs:{"trans_method":test}},[_v("点击")])],1)}
}

这里的this是父组件vm,可以看到子组件将来接受到的trans_method将会是test这个方法,v-bind是给子元素的属性,如果子元素是普通节点而不是组件节点,v-bind一个方法是没啥用的,如果子元素是组件节点,这个属性传递给子组件后,怎么调用要看子组件的逻辑,这里是形成不了闭包(这个说法有问题,准确的表达应该是“新生成一个匿名函数,它的会保留作用域链上的this的属性传递出去”,但是意思知道就行)的。

第二种情况:v-bind,绑定匿名方法:

<child :trans_method="()=>{fn1(name)}">点击</child>,

render函数是这样的

ƒ anonymous(
) {
with(this){return _c('div',{attrs:{"id":"app"}},[_c('child',{attrs:{"trans_method":()=>{fn1(name)}}},[_v("点击")])],1)}
}

可见能形成闭包,匿名函数的参数是子组件调用的时候传入,fn1可以传入父组件的参数。

第三种情况,再进一步 如果写成数组:

<child v-for="item in array" :trans_method="()=>{fn1(item)}">点击</child>

render函数是这样的:

ƒ anonymous(
) {
with(this){return _c('div',{attrs:{"id":"app"}},_l((array),function(item){return _c('child',{attrs:{"trans_method":()=>{fn1(item)}}},[_v("点击")])}),1)}
}

_l函数是renderList,逻辑是第二个参数(方法)调用array的元素-item,返回_c方法执行后生成的Vnode数组,可见也有闭包,只不过稍微复杂了一点点

注意:v-bind=“fn1()”而不是="fn1" 那绑定的将是fn1执行的返回值。

下面看v-on

v-on在普通节点上比如@click="fn1"方法,那么click指向的是($event)=>{fn1($event)},调用的时候传入$event到fn1的参数中,如果绑定的是fn1(),绑定的是($event)=> {return fn1()},不传入$event到fn1中,需要的话自己在fn1参数中写,注意这里绑定的不是方法的返回值,而是新构造了一个匿名函数。

注意这里有闭包,所以v-on的方法,直接写方法调用。

v-on写在组件节点上,要加.native,因为组件是没有on事件的,on指向的是传递给组件的属性,需要加上.native告诉组件做不同处理,把on事件绑定到vmComponent挂载的节点上。

element-ui(或者说Vue的子组件)绑定的方法中传入自定义参数的更多相关文章

  1. Vue 给子组件绑定v-model

    父组件使用子组件时,使用v-model指令,在子组件中使用value获取props的值 父组件 <template> <div style="margin:20px;dis ...

  2. vue.js_09_vue-父子组件的传值方法

    1.父向子传递数据 1>定义一个父组件和一个子组件 2>父组件通过v-bind绑定传递的数据  :parentmsg="msg" 3>子组件需要通过 props: ...

  3. 如何在element-UI 组件的change事件中传递自定义参数

    以select为例,如果select写在循环里,触发change事件时可能不只需要传递被选中项的值,还要传递index过去,来改变同一循环中的其他标签的状态. 下面这样写是无效的: @change=& ...

  4. Vue 给子组件传递参数

    Vue 给子组件传递参数 首先看个例子吧 原文 html <div class="container" id="app"> <div clas ...

  5. vue $emit子组件传出多个参数,如何在父组件中在接收所有参数的同时添加自定义参数

    Vue.js 父子组件通信的十种方式 前言 很多时候用$emit携带参数传出事件,并且又需要在父组件中使用自定义参数时,这时我们就无法接受到子组件传出的参数了.找到了两种方法可以同时添加自定义参数的方 ...

  6. vue.js组件之间通讯--父组件调用子组件的一些方法,子组件暴露一些方法,让父组件调用

    <!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...

  7. 浅入深出Vue:子组件与数据传递

    上一篇了解了组件的概念及在使用中需要注意的地方.在面对单个组件逻辑复杂需要拆分时,难免会遇到父子组件之间数据传递的问题.那么我们来了解一下在父子组件之间进行数据传递时需要遵循哪些约定,以及要注意哪些问 ...

  8. js 实现vue—引入子组件props传参

    参考:https://www.cnblogs.com/xiaohuochai/p/7388866.html 效果 html <!DOCTYPE html> <html> < ...

  9. vue 和 react 组件间通信方法对比

    vue 和 react 组件间通信方法对比: 通信路径 vue的方法 react的方法 父组件 => 子组件 props(推荐).slot(推荐).this.$refs.this.$childr ...

随机推荐

  1. 兼容ie8的前端下载方法

    背景:在xp系统上 ie8浏览器的下载需求,后端返回资源路径. 方法:谷歌下采用aDown下载,ie采用window.open 触发下载,如果不能自动自动下载,采用execCommand(" ...

  2. kali虚拟机添加共享文件夹

    1.保证安装了vmtools 2.在虚拟机本身设置共享文件夹,如图 其中选的这个文件夹就是宿主机里待共享的文件夹. 3,在kali里启用它: vmhgfs-fuse .host:[宿主机文件夹] /m ...

  3. vue--vant组件库Dialog弹出框

    安装vant UI框架: cnpm install vant –-save-dev 导入组件-在main.js里: import Vant from 'vant'; import'vant/lib/v ...

  4. java.nio.file.NoSuchFileException

    springboot +es es 2.1.0 参考这个 https://www.cnblogs.com/yueshutong/p/9381543.html cluster-nodes :改成127. ...

  5. Response.End ,Response.Redirect、Server.Transfer 引发 “正在中止线程”异常的问题

    google后得知:Response.End 方法终止页的执行,并将此执行切换到应用程序的事件管线中的 Application_EndRequest 事件,同时抛出ThreadAbortExcepti ...

  6. oracle性能优化之awr分析

    oracle性能优化之awr分析 作者:bingjava 最近某证券公司系统在业务期间系统运行缓慢,初步排查怀疑是数据库存在性能问题,因此导出了oracle的awr报告进行分析,在此进行记录. 导致系 ...

  7. 新建ui文件及相应.h和.cpp文件

    1.在Qt Creator中新建一个任意的项目(如untitled): 2.在该项目中添加QT设计师界面类:   3.将新建的3个文件(.ui..h..cpp)拷贝到目标项目文件夹中: 4.分别在目标 ...

  8. vue-cli webpack配置 简单分析

    vue-cli webpack配置分析 入口 从package.json可以看到开发和生产环境的入口. "scripts": { "dev": "no ...

  9. 构建web应用之——SpringMVC实现CRUD

    配置好SpringMVC最基本的配置后,开始实现处理数据的CRUD(CREATE, READ, UPDATE, DELETE) 为实现模块上的松耦合,我们将与数据库的交互任务交给DAO(Data Ac ...

  10. 给listview加动画,让动画执行结束后再刷新

    问题:当给listview的条目加动画时,例如添加一个条目或者移除一个条目,动画效果会和添加删除条目的逻辑同时进行,因为动画并不是阻塞式的,这样会造成动画还没有结束,条目已经添加或者移除,从而动画作用 ...