Vue 基础 之 事件处理

简介: Vue 基础 之 事件处理

Vue 基础 之 事件处理

1、事件监听


可以用  v-on:click 或者  @click  指令监听 DOM 事件,并在触发时运行一些 JavaScript 代码。


示例:

<div id="root">
  <button v-on:click="greet">Greet</button>
   <button @click="greet()">Greet</button>
</div>
var vm= new Vue({
  el: '#root',
  data: {
    name: 'Vue.js'
  },
  // 在 `methods` 对象中定义方法
  methods: {
    greet(event) {
      // `this` 在方法里指向当前 Vue 实例
      alert('Hello ' + this.name + '!')
    }
  }
})


2、事件修饰符


在事件处理程序中调用 event.preventDefault() 或 event.stopPropagation() 是非常常见的需求。尽管我们可以在方法中轻松实现这点,但更好的方式是:方法只有纯粹的数据逻辑,而不是去处理 DOM 事件细节。


为了解决这个问题,Vue.js 为 v-on 提供了事件修饰符。之前提过,修饰符是由点开头的指令后缀来表示的。


.stop

.prevent

.capture

.self

.once

.passive

 

<style>  
  ul {
            height: 200px;
            width: 150px;
            background: beige;
            padding: 10px;
            margin: 5px;
            overflow: auto;
        } 
 li {
            height: 70px;
            background: aquamarine;
            margin: 5px;
        }
</style>
  <button @click="clickOne">点击</button>
    <br>
    <button v-on:click="clickOne2">点击2</button>
    <br>  
 <!-- 阻止单击事件继续传播 -->
    <a v-on:click.prevent="doStop" href="https://www.baidu.com">不会跳转到其他网址 </a> <br>
    <a v-on:click.stop="doStop" href="https://www.baidu.com">会跳转到其他网址 </a>
    <br>
    <!-- 提交事件不再重载页面 -->
    <button v-on:submit.prevent="onSubmit">不重载</button>
    <br>
    <div v-on:click="inLink" class="inLink">
        <!-- 修饰符可以串联 -->
        <button v-on:click.prevent="inLink">内联1</button>
        <br>
    </div>
    <div v-on:click="inLink" class="inLink">
        <!-- 修饰符可以串联 -->
        <button v-on:click.stop="inLink">内联2</button>
        <br>
    </div>
    <!-- 只有修饰符 -->
    <button v-on:submit.prevent></button>
    <br>
    <!-- 添加事件监听器时使用事件捕获模式 -->
    <!-- 即内部元素触发的事件先在此处理,然后才交由内部元素进行处理 -->
    <div v-on:click.capture="doThis">捕获</div>
    <br>
    <!-- 只当在 event.target 是当前元素自身时触发处理函数 -->
    <!-- 即事件不是从内部元素触发的 -->
    <div v-on:click.self="doThat">指定过滤元素</div>
    <br>
    <!-- 点击事件将只会触发一次 -->
    <button v-on:click.once="once">只会触发一次</button>
    <br>
    <!-- 滚动事件的默认行为 (即滚动行为) 将会立即触发 -->
    <!-- 而不会等待 `onScroll` 完成  -->
    <!-- 这其中包含 `event.preventDefault()` 的情况 -->
    <br>
    <ul v-on:scroll="onScroll">
        <li>1</li>
        <li>2</li>
        <li>3</li>
        <li>4</li>
    </ul>
    <!--按键修饰符 别名
    .enter
    .tab
    .delete (捕获“删除”和“退格”键)
    .esc
    .space
    .up
    .down
    .left
    .right
    -->
    <!-- 只有在 `key` 是 `Enter` 时调用 `vm.submit()` -->
    <input v-on:keyup.enter="enter()">
    <br>
    <input v-on:keyup.esc="esc()">
    <br>
    <!--系统按键修饰符 别名
    .ctrl
    .alt
    .shift
    .meta  (就是Win键)
    -->
    <!-- Alt + C -->
    <input v-on:keyup.alt.c="cc">
    <br>
    <!-- Ctrl + Click -->
    <input v-on:keydown.ctrl="ctrlKey" >


Vue.config.productionTip = false
    new Vue({
        el: "#root",
        data: {
            name: "你好",
            person: {
                name: "小明"
            }
        }, 
methods: {
            clickOne() {
                alert("点击率")
            },
          clickOne2() {
                alert("点击率2")
            }, doStop() {
                alert("aaaaaaa")
            },
            inLink() {
                alert("inLink")
            },
            once() {
                alert("once")
            },
            onScroll() {
                console.log("滚了@@@@")
            },
            enter() {
                console.log("点击回车")
            },
            esc() {
                console.log("点击esc")
            },
            cc() {
                console.log("点击alt.c")
            },
            ctrlKey() {
                console.log("点击ctrlKey")
            },,
        }
    })

使用修饰符时,顺序很重要;相应的代码会以同样的顺序产生。因此,用 v-on:click.prevent.self 会阻止所有的点击,而 v-on:click.self.prevent 只会阻止对元素自身的点击。


image.png


image.png


image.png


B站链接

https://www.bilibili.com/video/BV1Zy4y1K7SH?p=15


目录
相关文章
|
2月前
|
JavaScript
Vue中如何实现兄弟组件之间的通信
在Vue中,兄弟组件可通过父组件中转、事件总线、Vuex/Pinia或provide/inject实现通信。小型项目推荐父组件中转或事件总线,大型项目建议使用Pinia等状态管理工具,确保数据流清晰可控,避免内存泄漏。
301 2
|
1月前
|
缓存 JavaScript
vue中的keep-alive问题(2)
vue中的keep-alive问题(2)
280 137
|
5月前
|
人工智能 JavaScript 算法
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
Vue 中 key 属性的深入解析:改变 key 导致组件销毁与重建
771 0
|
5月前
|
JavaScript UED
用组件懒加载优化Vue应用性能
用组件懒加载优化Vue应用性能
|
4月前
|
人工智能 JSON JavaScript
VTJ.PRO 首发 MasterGo 设计智能识别引擎,秒级生成 Vue 代码
VTJ.PRO发布「AI MasterGo设计稿识别引擎」,成为全球首个支持解析MasterGo原生JSON文件并自动生成Vue组件的AI工具。通过双引擎架构,实现设计到代码全流程自动化,效率提升300%,助力企业降本增效,引领“设计即生产”新时代。
403 1
|
4月前
|
JavaScript 安全
在 Vue 中,如何在回调函数中正确使用 this?
在 Vue 中,如何在回调函数中正确使用 this?
259 0
|
5月前
|
JavaScript 前端开发 开发者
Vue 自定义进度条组件封装及使用方法详解
这是一篇关于自定义进度条组件的使用指南和开发文档。文章详细介绍了如何在Vue项目中引入、注册并使用该组件,包括基础与高级示例。组件支持分段配置(如颜色、文本)、动画效果及超出进度提示等功能。同时提供了完整的代码实现,支持全局注册,并提出了优化建议,如主题支持、响应式设计等,帮助开发者更灵活地集成和定制进度条组件。资源链接已提供,适合前端开发者参考学习。
465 17
|
5月前
|
JavaScript 前端开发 UED
Vue 表情包输入组件实现代码及详细开发流程解析
这是一篇关于 Vue 表情包输入组件的使用方法与封装指南的文章。通过安装依赖、全局注册和局部使用,可以快速集成表情包功能到 Vue 项目中。文章还详细介绍了组件的封装实现、高级配置(如自定义表情列表、主题定制、动画效果和懒加载)以及完整集成示例。开发者可根据需求扩展功能,例如 GIF 搜索或自定义表情上传,提升用户体验。资源链接提供进一步学习材料。
273 1
|
5月前
|
存储 JavaScript 前端开发
如何高效实现 vue 文件批量下载及相关操作技巧
在Vue项目中,实现文件批量下载是常见需求。例如文档管理系统或图片库应用中,用户可能需要一次性下载多个文件。本文介绍了三种技术方案:1) 使用`file-saver`和`jszip`插件在前端打包文件为ZIP并下载;2) 借助后端接口完成文件压缩与传输;3) 使用`StreamSaver`解决大文件下载问题。同时,通过在线教育平台的实例详细说明了前后端的具体实现步骤,帮助开发者根据项目需求选择合适方案。
505 0
|
5月前
|
JavaScript 前端开发 UED
Vue 项目中如何自定义实用的进度条组件
本文介绍了如何使用Vue.js创建一个灵活多样的自定义进度条组件。该组件可接受进度段数据数组作为输入,动态渲染进度段,支持动画效果和内容展示。当进度超出总长时,超出部分将以红色填充。文章详细描述了组件的设计目标、实现步骤(包括props定义、宽度计算、模板渲染、动画处理及超出部分的显示),并提供了使用示例。通过此组件,开发者可根据项目需求灵活展示进度情况,优化用户体验。资源地址:[https://pan.quark.cn/s/35324205c62b](https://pan.quark.cn/s/35324205c62b)。
248 0