emit事件的顺序疑问

来源:8-9 event(8)

qq_枕流_0

2020-08-02

<parent-button @parent-click="handleParentClick"/>
let childButton = {
    template: `
      <button @click="emitChildButton">
      child button
      </button>
    `,
    methods: {
        emitChildButton() {
            this.$emit('child-click', new Date().getTime())
        }
    }
}
let parentButton = {
    template: `
      <child-button @click.native="emitParentClick"/>
      <child-button @child-click="emitParentClick"/>
    `,
    methods: {
        emitParentClick(timeStamp) {
            this.$emit('parent-click', timeStamp)
        }
    }
}

这里 parent Button
写成是 click.native在vue-devtools的events panel中就是正常的 child-click(DOM事件)->冒泡->parent-click(DOM事件)
图片描述
写成child-click走自定义事件的顺序就变成了parent-click(自定义事件)->child-click(DOM事件)
图片描述

自定义事件的优先级是优先于DOM事件的吗?

写回答

1回答

ustbhuangyi

2020-08-02

你父组件的 $emit 执行不也应该是子组件先 $emit 了 child-click 自定义事件,然后在父组件中监听了这个自定义事件执行 emitParentClick 方法才执行的吗。建议你加个 debugger 断点,就知道调用顺序了

0
1
qq_枕流_0
嗯,click.native走的是DOM事件,顺序是事件冒泡的顺序,跟自定义事件的$emit搞混淆了
2020-08-03
共1条回复

Vue.js 源码深入解析 深入理解Vue实现原理

全方位讲解 Vue.js 源码,进阶高级工程师

4984 学习 · 1037 问题

查看课程