VUE $EMIT事件

总结:

子组件传出单个参数时
子组件传递参数 this.$emit('parent-event',childparam)
父组件传递函数方法 v-on:parent-event='emitevent($event,Parentparames...)'
父组件接受参数方法 emitevent(childparam,Parentparames...)
注:该方法只能接受的第一个参数childparam为子组件传递的参数,传递多个也只能接受到一个.父组件参数按传递的参数位置传递.

子组件传出多个参数时
子组件传递参数 this.$emit('parent-event',childparams...)
父组件传递函数方法 v-on:parent-event='emitevent(arguments,Parentparames...)'
父组件接受参数方法 emitevent(arguments,Parentparames...)
注:该方法接受的子组件传递来的参数以arguments数组的形式访问.父组件参数按传递的参数位置传递.

事件名

不同于组件和 prop,事件名不存在任何自动化的大小写转换。而是触发的事件名需要完全匹配监听这个事件所用的名称。举个例子,如果触发一个 camelCase 名字的事件:

this.$emit('myEvent')

则监听这个名字的 kebab-case 版本是不会有任何效果的:

<!-- 没有效果 -->
<my-component v-on:my-event="doSomething"></my-component>

不同于组件和 prop,事件名不会被用作一个 JavaScript 变量名或 property 名,所以就没有理由使用 camelCase 或 PascalCase 了。并且 v-on 事件监听器在 DOM 模板中会被自动转换为全小写 (因为 HTML 是大小写不敏感的),所以 v-on:myEvent 将会变成 v-on:myevent——导致 myEvent 不可能被监听到。

因此,我们推荐你始终使用 kebab-case 的事件名

简单案列

/* **
*   父组件
*   Parentparameters    父组件传递的参数
*   emitevent           父组件中定义的方法
*   parent-event        父组件传递给子组件的事件
*  
** */
<my-component v-on:parent-event='emitevent($event,Parentparames)'></my-component>

/* **
*   父组件
*   Parentparameters    父组件传递的参数
*   emitevent           父组件中定义的方法
*   parent-event        父组件传递给子组件的事件
*  
** */
<my-component v-on:parent-event='emitevent(arguments,Parentparame1,Parentparame2)'></my-component>

/* **
*   子组件
*	Parentparameters    父组件传递的参数
*	emitevent           父组件中定义的方法
*   parent-event        父组件传递给子组件的事件
*   
** */
this.$emit('parent-event',childparam1,childparam2)

/* **
*   父组件接受参数方法
*   Parentparameters    父组件传递的参数
*   emitevent           父组件中定义的方法
*   arguments		    子组件传递参数的类数组对象
*   parentparam1		父组件传递的第一个参数
*   parentparam2
** */
emitevent(arguments,parentparam1,parentparam2){
    arguments[0] = childparam1;			//子组件传递的第一个参数
    arguments[1] = childparam2;			//子组件传递的第二个参数
    parentparam1 = Parentparame1;		//父组件传递的第一个参数
    parentparam2 = Parentparame2;		//父组件传递的第二个参数
}
posted @ 2021-05-17 02:28  Scok  阅读(793)  评论(0编辑  收藏  举报