vue.js - 什么是事件监听器的捕获模式

标签 vue.js

Event Modifiers下的vue文档中,有一个名为 capture 的修饰符示例,它声明如下:

<!-- use capture mode when adding the event listener -->
<div v-on:click.capture="doThis">...</div>

我进行了一些搜索,但没有找到关于这如何修改事件绑定(bind)的明确答案,然后我心想‘你知道谁总是有答案吗?堆栈溢出'

最佳答案

所以在发布后我偶然发现了 this article这清楚地说明了这一点。对于这个例子,假设您有三个相互嵌套的元素:

<div class="outer">
    <div class="middle">
        <div class="inner"></div>
    </div>
</div>

当点击事件发生时,有两个阶段:第一个阶段称为捕获,第二个阶段称为冒泡。当你点击.inner时,事件从最外层的容器元素.outer向下遍历,到.middle,再到 .innercapturing阶段,然后从.inner.middle,再到.outer冒泡阶段。

如果在 .inner 上为点击事件处理程序设置了 capture:

<div class="outer">
    <div class="middle">
        <div class="inner" v-on:click.capture="doThis"></div>
    </div>
</div>

然后你点击它,它会在捕获阶段点击.outer,然后是.middle,然后是.inner,这将导致 doThis(...) 被调用,之后冒泡阶段开始。

如果在 .middle 上为点击事件处理程序设置了 capture

<div class="outer">
    <div class="middle" v-on:click.capture="doThis">
        <div class="inner"></div>
    </div>
</div>

然后你点击它,它会命中.outer,然后是.middle,在捕获阶段,这会导致doThis(...) 被调用,然后在捕获阶段点击 .inner,之后冒泡阶段开始。

编辑:感谢下面所有的精彩回复,我已经修改了答案以修复我不正确的地方。

关于vue.js - 什么是事件监听器的捕获模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41992865/

相关文章:

javascript - 没有 Vue 可以使用 Vuex 吗? (Vuex 服务器端?)

arrays - 如何使用 Vue.js 2 按日期对数组进行排序

javascript - 计算属性未在 Vue.js 中返回正确的值

javascript - 调用曾孙组件方法

javascript - 如何从 Vue.js 功能组件发出事件?

javascript - 拉拉维尔 5 : Get the default value of my select option with onChange event using Vue js

node.js - 如何在同一 IDE 上构建/运行 Golang 和 SPA 框架,例如 ReactJs/VueJs?

javascript - Vue 2 - 如何在从数据库中获取数据后选择正确的 <select> 选项

laravel - 从 axios 响应中获取数据(Vuejs)

javascript - 传递激活器槽