『VUE』10. 事件修饰符(详细图文注释)


欢迎关注 『VUE』 专栏,持续更新中
欢迎关注 『VUE』 专栏,持续更新中

什么是事件修饰符?

vue

在 Vue.js 中,事件修饰符是一种用于处理 DOM 事件的特殊指令,可以在事件处理程序中提供额外的控制或功能。以下是一些常用的 Vue.js 事件修饰符:

.stop:阻止事件继续传播,即调用 event.stopPropagation()。

<button @click.stop="handleClick">Click Me</button>

.prevent:阻止事件的默认行为,即调用 event.preventDefault()。

<form @submit.prevent="handleSubmit">Submit Form</form>

.capture:使用事件捕获模式,即在捕获阶段处理事件。

<div @click.capture="handleClick">Click Me</div>

.self:只有当事件是从元素自身触发时才会触发处理函数,而不是冒泡过程中的其他元素。

<div @click.self="handleClick">Click Me</div>

.once:事件只会触发一次,之后移除事件监听器。

<button @click.once="handleClick">Click Me Once</button>

.passive:指示浏览器不应该阻止事件的默认行为,可以提高页面滚动性能。

<div @touchstart.passive="handleTouchStart">Touch Me</div>

js

  • event.preventDefault() :调用 event.preventDefault() 方法会告诉浏览器取消事件的默认行为。比如,在点击链接时,如果你调用了 event.preventDefault(),那么链接不会导航到新的页面

  • event.stopPropagation():
    这个方法用于停止事件在 DOM 树中的传播,阻止事件的进一步传播或冒泡。如果一个父元素和子元素都绑定了相同类型的事件,并且事件在子元素上触发后还要继续冒泡到父元素,你可以在子元素上调用 event.stopPropagation() 来阻止这种冒泡行为。

  • event.stopImmediatePropagation():
    这个方法与 event.stopPropagation() 类似,但是它不仅停止事件传播,还阻止任何后续事件处理程序被调用。

  • return false:
    在某些情况下,可以在事件处理函数中使用 return false 来同时阻止默认行为和停止事件传播。例如,在 HTML 中使用 οnclick=“return false;” 可以达到这个效果。


不使用修饰符 原生js实现禁用事件对象的默认事件

我们点击网页上的跳转按钮后会跳转到百度,也会控制台中打印"点击了",使用e.preventDefault()就可以禁用网页跳转.

EventDemo6.vue

<template>
  <h3>事件修饰符</h3>
  <a @click="eventStyle" href="www.baidu.com">跳转</a>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    eventStyle(e) {
      e.preventDefault(); //禁用控件本身默认的事件,比如说我们a标签的跳转到百度事件会被禁用
      console.log("点击了");
    },
  },
};
</script>


点击了这么多下还在原来的网页.
在这里插入图片描述


使用事件修饰符 .prevent

注释了// e.preventDefault(),但是通过@click.prevent="eventStyle"的方式设置了禁用默认事件.

EventDemo6.vue

<template>
  <h3>事件修饰符</h3>
  <a @click.prevent="eventStyle" href="www.baidu.com">跳转</a>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    eventStyle(e) {
      //   e.preventDefault(); //禁用控件本身默认的事件,比如说我们a标签的跳转到百度事件会被禁用
      console.log("点击了");
    },
  },
};
</script>


使用事件修饰符 .stop

  • 不使用.stop,先触发了p然后因为p在div中,点击p触发之后还会触发div的事件,顺序是p-div的冒泡顺序
    在这里插入图片描述
<template>
  <h3>事件修饰符</h3>
  <a @click.prevent="eventStyle" href="www.baidu.com">跳转</a>

  <div @click="clickDiv">
    <p @click="clickP">点我先触发p还是div呢?</p>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    eventStyle(e) {
      //   e.preventDefault(); //禁用控件本身默认的事件,比如说我们a标签的跳转到百度事件会被禁用
      console.log("点击了");
    },
    clickDiv() {
      console.log("点击了div");
    },
    clickP() {
      console.log("点击了p");
    },
  },
};
</script>

  • 使用了.stop 禁用了冒泡,只触发了p不会触发父节点div的事件
    在这里插入图片描述
<template>
  <h3>事件修饰符</h3>
  <a @click.prevent="eventStyle" href="www.baidu.com">跳转</a>

  <div @click="clickDiv">
    <p @click.stop="clickP">点我先触发p还是div呢?</p>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    eventStyle(e) {
      //   e.preventDefault(); //禁用控件本身默认的事件,比如说我们a标签的跳转到百度事件会被禁用
      console.log("点击了");
    },
    clickDiv() {
      console.log("点击了div");
    },
    clickP() {
      console.log("点击了p");
    },
  },
};
</script>


使用事件修饰符 .self

只有点击"div的内容"才会触发,也就是只有点击了div本身自己才能触发事件,不受到冒泡影响.哪怕p没有使用.stop也不会通过p触发div

<template>
  <h3>事件修饰符</h3>
  <a @click.prevent="eventStyle" href="www.baidu.com">跳转</a>

  <div @click.self="clickDiv">
    div的内容
    <p @click="clickP">点我先触发p还是div呢?</p>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    eventStyle(e) {
      //   e.preventDefault(); //禁用控件本身默认的事件,比如说我们a标签的跳转到百度事件会被禁用
      console.log("点击了");
    },
    clickDiv() {
      console.log("点击了div");
    },
    clickP() {
      console.log("点击了p");
    },
  },
};
</script>


## 总结 大家喜欢的话,给个👍,点个关注!给大家分享更多计算机专业学生的求学之路!

版权声明:

发现你走远了@mzh原创作品,转载必须标注原文链接

Copyright 2024 mzh

Crated:2024-3-1

欢迎关注 『VUE』 专栏,持续更新中
欢迎关注 『VUE』 专栏,持续更新中
『未完待续』


  • 39
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Vue 中,.sync 是一个语法糖,它能够简化父子组件之间的数据传递。.sync 修饰符实际上是一个双向绑定的简写形式,它会自动创建一个名为 update:propName 的自定义事件,并且在父组件中监听这个事件,然后更新子组件的数据。 例如,在父组件中使用子组件时,可以通过 v-bind.sync 修饰符将父组件的数据与子组件的数据绑定在一起: ``` <template> <ChildComponent :message.sync="messageFromParent"></ChildComponent> </template> ``` 这里的 .sync 修饰符会自动将子组件的 message 属性与父组件的 messageFromParent 属性进行双向绑定,并且在父组件中监听名为 update:message 的自定义事件,以更新父组件的数据。 ``` <template> <ChildComponent :message.sync="messageFromParent"></ChildComponent> <button @click="updateMessage">Update Message</button> </template> <script> export default { data() { return { messageFromParent: 'Hello World' } }, methods: { updateMessage() { this.messageFromParent = 'Hello Vue' } } } </script> ``` 在子组件中,可以通过 $emit() 方法触发 update:message 事件,以更新父组件的数据。 ``` <template> <div> <input type="text" v-model="message"> <button @click="$emit('update:message', message)">Update Message</button> </div> </template> <script> export default { props: { message: { type: String } } } </script> ``` 这样,父组件和子组件之间就可以通过 .sync 修饰符实现双向数据绑定了。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

发现你走远了

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值