vue-$event的使用场景

215 阅读1分钟

一、事件对象

在vue中,事件的回调函数在定义时不写括号,默认的参数是事件对象

    <el-button @click="handleClick">子组件按钮</el-button>
    
    
    handleClick(e) {
      console.log(e)
    }

如果写了括号,不传参,那么打印结果为undefined

    <el-button @click="handleClick()">子组件按钮</el-button>

括号中传入$event,则参数为事件对象

    <el-button @click="handleClick($event)">子组件按钮</el-button>

以上,handleClickhandleClick($event)的效果是一样的,那什么时候需要传$event呢?

当既需要事件对象,又需要其他参数时,$event的作用就出来了

    <ul>
      <li v-for="n in 5" :key="n">
        <el-button @click="handleClick($event, n)">子组件按钮</el-button>
      </li>
    </ul>
    
    handleClick(e, n) {
      console.log(e, n)
    }

效果:

image.png

如果不用$event,使用箭头函数也是可以的,一样的效果:

        <el-button @click="e => handleClick(e, n)">子组件按钮</el-button>

二、子组件通过$emit触发父组件的事件,传递过来的参数,通过$event接收

子组件:

    <el-button @click="$emit('btn', 100, 200)">子组件按钮</el-button>

父组件:

    <Btn @btn="handleBtn" />
    <Btn @btn="handleBtn($event)" />

handleBtn不写括号时,接收到全部参数,当写成handleBtn($event)时,接收到第一个参数

乍一看好像没什么用呢,但是既需要子组件传来的参数,又需要当前下标,就需要用到了:

    <ul>
      <li v-for="n in 5" :key="n">
        <Btn @btn="handleBtn($event, n)" />
      </li>
    </ul>

注意:$event只能接收第一个参数

如果说不用$event,也可以写成这样:

    <Btn @btn="(...rest) => handleBtn(...rest, n)" />