iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >Vue事件的基本操作你知道吗
  • 725
分享到

Vue事件的基本操作你知道吗

2024-04-02 19:04:59 725人浏览 泡泡鱼
摘要

目录1.事件的基本操作1.1v-on1.1.1v-on的小案例1.2事件修饰符1.2.1事件修饰符代码解析1.3键盘事件1.4计算属性(computed)1.5监视属性(watch)

1. 事件的基本操作

1.1 v-on

功能:绑定指定事件名的回调函数

标准写法:
v-on:click='xxx'
v-on:keyup='xxx(参数)'
v-on:keyup.enter='xxx'
简便写法:
@click='xxx'
@keyup='xxx'
@keyup.enter='xxx'

1.1.1 v-on的小案例

 <div id="root">
        <!-- 需求当点击按钮时弹出同学你好! -->
        <h1>欢迎来到{{name}}学习</h1>
        <!--   v-on:xxx可以简写为: @xxx   -->
        <button v-on:click="btn1">点击我进行学习(不传参)</button> 
        <button @click="btn2('hello!','同学',$event)">点击我进行学习(传参)
				//如果需要传参数的话就在后面加(),里面写的就参数
    </div>

    <script>
        
        Vue.config.productionTip = false
        var vm = new Vue({
            el: '#root',
            data: {
                name: "清华大学"
            },
            methods: {
                btn1() {
                    alert("同学你好!")
                },
                btn2(x, y, event) {
                    console.log(x, y);
                    console.log(event.target.innerText);
                    alert("同学你好!")
                }
            }
        })
    </script>

1.2 事件修饰符

 Vue中的事件修饰符有6个            - prevent : 阻止默认行为            - stop : 禁止冒泡            - once : 事件只触发一次            - capture : 使用事件捕获模式            - self : 只有even.target所指向的操作元素才能触发事件            - passive : 让事件的默认行为立即执行<body>
    <div id="root">
        <!-- 1. prevent : 阻止默认行为 -->
        <a href="https://www.bilibili.com/" @click.prevent = "prevent">点击我进入b站</a>
        <hr>
        <!-- 2. stop : 禁止冒泡 -->
        <div @click = "stop" class="div1">
            <button @click.stop = "stop">点击我触发事件</button>
        </div>
        <hr>
        <!-- 3. once : 事件只触发一次 -->
        <button @click.once = "once">我只能触发一次哦</button>
        <hr>
        <!-- 4. capture : 使用事件捕获模式 -->
        <div class="box1" @click.capture = "capture(1)">
            div1
            <div class="box2" @click = "capture(2)">
                div2
            </div>
        </div>
        <hr>
        <!-- 5. self : 只有even.target所指向的操作元素才能触发事件 
                相当于要满足两个条件
                    - 1. event.target必须指向self所修饰的元素
                    - 2. 触发的也必须是这个元素
                    从某种意义上相当于禁止了冒泡,因为冒泡虽然触发上面事件
                    但是event.target所指向的并非是这个元素
        -->
        <div class="box3" @click.self = "self">
            <button @click = "self">点击我</button>
        </div>
        <hr>
        <!-- 6. passive : 让事件的默认行为立即执行 
            scroll:表示的是滚动条进行滚动,滚动条改变就触发,并且滑到底就不能继续触发
            wheel :表示的是鼠标滚轮滚动,滚动一次就触发一次,滑到底依旧可以触发
        -->
        <ul style="overflow: auto; height: 100px;" @scroll.passive = "passive">
            <li style="height: 600px;"></li>
        </ul>
          <!-- 7. 如果想要使用多个修饰符可以使用链式形式 -->
          <!-- 需要即想要阻止冒泡,也想要禁止默认行为 -->
        <div @click = "stop" class="div1">
            <a @click.stop.prevent = "stop" href="Https://www.baidu.com">点击我进入</a>
        </div>
    </div>

1.2.1 事件修饰符代码解析

html代码

<body>
    <div id="root">
        <!-- 1. prevent : 阻止默认行为 -->
        <a href="https://www.bilibili.com/" @click.prevent = "prevent">点击我进入b站</a>
        <hr>
        <!-- 2. stop : 禁止冒泡 -->
        <div @click = "stop" class="div1">
            <button @click.stop = "stop">点击我触发事件</button>
        </div>
        <hr>
        <!-- 3. once : 事件只触发一次 -->
        <button @click.once = "once">我只能触发一次哦</button>
        <hr>
        <!-- 4. capture : 使用事件捕获模式 -->
        <div class="box1" @click.capture = "capture(1)">
            div1
            <div class="box2" @click = "capture(2)">
                div2
            </div>
        </div>
        <hr>
        <!-- 5. self : 只有even.target所指向的操作元素才能触发事件 
                相当于要满足两个条件
                    - 1. event.target必须指向self所修饰的元素
                    - 2. 触发的也必须是这个元素
                    从某种意义上相当于禁止了冒泡,因为冒泡虽然触发上面事件
                    但是event.target所指向的并非是这个元素
        -->
        <div class="box3" @click.self = "self">
            <button @click = "self">点击我</button>
        </div>
        <hr>
        <!-- 6. passive : 让事件的默认行为立即执行 
            scroll:表示的是滚动条进行滚动,滚动条改变就触发,并且滑到底就不能继续触发
            wheel :表示的是鼠标滚轮滚动,滚动一次就触发一次,滑到底依旧可以触发
        -->
        <ul style="overflow: auto; height: 100px;" @scroll.passive = "passive">
            <li style="height: 600px;"></li>
        </ul>
          <!-- 7. 如果想要使用多个修饰符可以使用链式形式 -->
          <!-- 需要即想要阻止冒泡,也想要禁止默认行为 -->
        <div @click = "stop" class="div1">
            <a @click.stop.prevent = "stop" href="https://www.baidu.com">点击我进入</a>
        </div>
    </div>

js代码

 <script>
        Vue.config.productionTip = false
        new Vue({
            el: '#root',
            data: {
            },
            methods:{
                prevent(){
                    alert("禁止默认行为");
                },
                stop(){
                    alert("禁止冒泡")
                },
                once(){
                    alert("只能触发一次")
                },
                capture(x){
                    alert("现在是捕获模式  "+x)
                },
                self()
                {
                    alert("self")
                },
                passive(){
                    for (let index = 0; index < 1000; index++) {
                        console.log("1")
                    }
                }
            }
        })
    </script>
</body>

1.3 键盘事件

常用的按键别名:	
			1.正常使用
      例如: @keyup.enter = "xxx"
 						- 回车   enter
            - 删除   delete
            - 退出   esc
            - 空格   space
            - 上     up
            - 下     down
            - 左     left
            - 右     right
       2. 特别的按键
       			系统修饰键 :
            - ctrl,shift,alt,meta(就是window键)
            - 换行   tab(必须配合keydown去使用)
            - 配合keyup使用,当按下修饰键的时候在按下其他的键,然后在松开其他键事件才可以被触发
            - 配合keydown使用,就直接触发事件
       3.如果想要绑定其他按键,可以使用按键原始本身的key值(名字)去绑定
       4.可以自定义去设置按键别名,Vue.config.keyCodes.自定义键名 = 键值

具体案例

 <div id="root">
        <h1>欢迎学习{{name}}</h1>
        <input type="text" @keyup="keyboard">
        <br><br>
        <input type="text" @keyup.huiche="keyboard">
        <br><br>
        <input type="text" @keyup.ctrl.y="keyboard">
    </div>
    <script>
        Vue.config.productionTip = false
        Vue.config.keyCodes.huiche = 13  //定义了一个别名
        var vm = new Vue({
            el: '#root',
            data: {
                name: "Vue"
            },
            methods:
            {
                keyboard(event){
                    // console.log(event.keyCode);   按键编码
                    // console.log(event.key);      按键的名字
                    console.log(event.target.value);
                }
            }
        })
    </script>

1.4 计算属性(computed)

1.在页面中的使用方法:=={{方法名}}==来显示计算结果

2.定义:要使用的属性/变量不存在,需要通过已有的属性计算出来的

3.原理:底层是借助了Object.defineProperty方法所提供的getter和setter

4.get函数执行的时机:

(1)初次读取的时候会执行一次

(2)当所依赖的数据发生改变时就会再次被调用

5.相比于methods的优势,内部是有缓存机制(复用),效率会更高,调试会更方便

6.如果计算属性要被修改,那必须写set函数去响应修改,且set中要引起计算时依赖的数据发生改变

7.需要注意的一个特殊点:以下面例子举例:get函数中return返回值的会作为fullname的值进行返回,在控制台可以看到是这样的形式呈现fullname:xxx

8.computed中的this指向是vm

9.简写形式: 基本要求就是在不使用set的情况下才可以简写 注意在调用的时候不要写成fullname()

<div id="root">
        姓: <input type="text" v-model="firstname">
        <br><br>
        名: <input type="text" v-model="lastname">
        <!-- 第一种写法 使用插值语法 -->
        <!-- <h3>全名: {{firstname.slice(0,3)}} - {{lastname}}</h3> -->
        <!-- 第二种写法 使用methods -->
        <!-- <h3>全名: {{fullname()}}</h3> -->
        <!-- 第三种写法 使用computed(计算属性) -->
        <h3>全名:{{fullname}}</h3>
    </div>
    <script>
        Vue.config.productionTip = false
        let vm = new Vue({
            el: '#root',
            data: { //属性
                firstname: "张",
                lastname: "三",
            },
            // methods:
            // {
            //     fullname() {
            //         // 这里的this指向是vm
            //         return this.firstname.slice(0,3) + "-" + this.lastname
            //     }
            // }
            computed: {
                fullname: {
             
                    get() {
                        return this.firstname + "-" + this.lastname
                    },
                    set(value) {                  
                        // 当fullname被修改时,set才会被调用
                        var arr = value.split("-") //按照指定字符串进行拆分成数组
                        this.firstname = arr[0]
                        this.lastname = arr[1]
                    }
                    
                }
            }
        })
    </script>

1.5 监视属性(watch)

1.当所监视的属性发生变化时,回调函数自动调用,进行相关的操作

2.监视属性必须要存在,才能进行监视

3.监视属性的两种写法:

(1)在new Vue中配置watch

​(2)通过vm.$watch进行监视

4.watch里handler函数this的指向是vm

<div id="root">
        <h1>今天天气真{{weather}}</h1>
        <button @click="change">切换天气</button>
         <h3>a的值是: {{a}}</h3>
        <!-- 在这里面可以写简单的代码 -->
        <button @click = "a++">点击我让a+1</button>
    </div>
    <script>
        Vue.config.productionTip = false
        let vm = new Vue({
            el: '#root',
            data: {
                flag: true
            },
            computed: {
                weather() {
                    return this.flag ? "凉快" : "炎热"
                }
            },
            methods: {
                change() {
                    return this.flag = !this.flag
                }
            },
            watch:{  
                flag:{
                  // 第一个参数表示:修改后的值,第二个参数表示修改前的值
                   handler(newValue,oldValue){
                    console.log("flag被修改了");
                   },
                   immediate:true, //在一上来就执行一次
                  	deep:true  //表示深层次监视
               }
            }
        })
        vm.$watch("weather",{
            immediate:true,
            handler(newValue,oldValue){
                console.log("weather被修改了")
            }
        })

1.5.1 watch和computed的区别

watch和computed的区别是:

1.watch能够完成的功能,computed不一定可以完成,但是computed可以完成的,watch也可以完成

2.computed是依靠return的返回值(getter),所以它不能够完成异步的任务,而watch可以

3.watch是靠我们自己写代码进行修改

4.在学Vue当中有两个很重要的原则:

  • 所有被Vue管理的函数,最好写成普通的函数,因为这样this的指向才是vue或者组件的实例化对象
  • 所有不被Vue管理的函数,最好写成箭头函数(ajax的回调函数,定时器的回调函数,Promise的回调函数),因为这样this的指向才是vue或者组件的实例化对象
 <div id="root">
        <!-- 用watch写一遍姓名的案例 -->
        姓: <input type="text" v-model="firstname">
        <br><br>
        名: <input type="text" v-model="lastname">
        <h2>全名: {{fullname}}</h2>
    </div>
    <script >
        // 需求:想要1s过后在显示全名
        Vue.config.productionTip = false
        let vm = new Vue({
            el: '#root',
            data: {
                firstname: "张",
                lastname: "三",
                fullname: "张 - 三"
            },
            watch: {
                firstname: {
                    handler(newval) {
                        console.log(this); //vm
                        
                       setTimeout(() => { //这里如果使用普通函数this就指向window
                        console.log(this);  //vm
                        this.fullname = newval + " - " + this.lastname
                       }, 1000);
                    }
                },
                lastname: {
                    handler(newval) {
                        setTimeout(() => {
                        this.fullname = this.firstname + " - " + newval
                        }, 1000);
                    }
                }
            }
        })
    </script>

总结

以上就是今天要讲的内容,本文仅仅介绍了Vue一些基本事件的操作,希望对大家有帮助!

--结束END--

本文标题: Vue事件的基本操作你知道吗

本文链接: https://www.lsjlt.com/news/140417.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Vue事件的基本操作你知道吗
    目录1.事件的基本操作1.1v-on1.1.1v-on的小案例1.2事件修饰符1.2.1事件修饰符代码解析1.3键盘事件1.4计算属性(computed)1.5监视属性(watch)...
    99+
    2024-04-02
  • Vue事件的基本操作有哪些
    小编给大家分享一下Vue事件的基本操作有哪些,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1. 事件的基本操作1.1 v-on功能:绑定指定事件名的回调函数标准写...
    99+
    2023-06-29
  • 你知道Java的这些骚操作吗?
    目录一、try with catch二、instance of三、不定项参数 ...四、跳出多层循环的label五、方法引用总结一、try with catch 还记得这样的代码吗?...
    99+
    2024-04-02
  • Vue的基本知识你都了解吗
    目录1. Vue的基本知识1.1 Vue的使用1.2 插值语法1.3 v-bind(单向绑定)1.4 v-model(双向绑定)1.4.1 v-model和v-bind的区别1.4....
    99+
    2024-04-02
  • 你知道如何使用shell命令来操作文件吗?
    当我们在操作计算机上的文件时,使用shell命令可以让我们更加快速、准确地完成操作。本文将介绍如何使用shell命令来操作文件,帮助大家更好地管理自己的文件。 一、常用的shell命令 ls命令 ls命令用于查看当前目录下的文件和文件夹...
    99+
    2023-09-30
    path shell git
  • python中对列表的相关操作你知道吗
    目录1. 添加2. 删除3. 查找/修改4. 其他总结list1 = ['火腿肠', '面包', '牛奶', '可乐', '方便面'] 1. 添加 # append:在列表尾部添加元...
    99+
    2024-04-02
  • Java Spring @Autowired的这些骚操作,你都知道吗
    目录前言1. @Autowired的默认装配2. 相同类型的对象不只一个时3. @Qualifier和@Primary4. @Autowired的使用范围4.1 成员变量4.2 构造...
    99+
    2024-04-02
  • python怎么使用xlwt操作excel你知道吗
    目录总结一、安装 pip install xlwt 二、创建表格并写入 import xlwt # 创建一个workbook并设置编码 workbook = xlwt.Workboo...
    99+
    2024-04-02
  • Vue生命周期中的组件化你知道吗
    目录引出生命周期销毁流程生命周期生命周期总结组件化 template: 非单文件组件 组件的几个注意点  组件的嵌套 &n...
    99+
    2024-04-02
  • Java架构师的5大基本能力你知道吗
    目录业务架构师与基础架构师区别 如何做技术选型?总结 总体而言,架构师负责软件领域的顶层设计。架构师需要根据公司的发展,规划企业未来若干年的架构,制定可落地的架构方案,解决...
    99+
    2024-04-02
  • Java Spring的两种事务你知道吗
    目录1.Spring中的事务控制方式2.编程式事务控制相关对象2.1PlatformTransactionManager2.2TransactionDefinition2.3Tran...
    99+
    2024-04-02
  • 你知道如何在Python中使用bash脚本操作数组吗?
    在Python中,使用bash脚本操作数组是一种非常常见的方式,特别是在需要处理大量数据时。在本文中,我们将介绍如何在Python中使用bash脚本操作数组,并提供一些实用的示例代码。 首先,我们需要了解一下bash脚本和数组的基础知识。b...
    99+
    2023-10-07
    bash 数组 path
  • 你知道吗?ASP中的API对象能够操作Git!
    ASP是一种广泛使用的Web编程语言,它提供了许多有用的对象和工具来帮助开发人员构建功能强大的Web应用程序。其中一个非常有用的对象是API对象,它可以用来访问和操作许多不同的Web服务和API。但是,你知道吗?ASP中的API对象还可以用...
    99+
    2023-11-03
    api 对象 git
  • 你知道吗?使用 Go 在 Windows 上进行文件操作的技巧!
    Go 语言是一种高效、简洁且易于学习的编程语言,它可以在不同的操作系统上进行开发。在 Windows 平台上,使用 Go 进行文件操作可以带来很多优势。本文将介绍一些使用 Go 在 Windows 上进行文件操作的技巧,并提供一些示例代码,...
    99+
    2023-11-10
    windows 文件 教程
  • 你知道PHP中的UNIX文件函数有哪些常用的操作吗?
    PHP是一门非常流行的开源编程语言,它被广泛应用于Web开发。在PHP中,UNIX文件函数是非常重要的一部分,用于对文件进行各种操作。这里我们将介绍一些常用的UNIX文件函数及其用法。 1. fopen() 函数 fopen() 函数用于打...
    99+
    2023-10-18
    unix 文件 函数
  • 你知道如何在 Python 中使用 NumPy 操作文件对象吗?
    当今时代,数据处理和分析已经成为了各行各业中不可或缺的一部分。而 Python 语言中,NumPy 是一个非常重要的第三方库,它提供了一些高效的数组操作和数学函数,可以帮助我们更加方便地处理数据。在这篇文章中,我们将探讨如何在 Python...
    99+
    2023-11-04
    numy 文件 对象
  • Node.js的基本应用你知道多少
    目录一、Node.js是什么1、浏览器的内核2、为什么要用node.js3、node.js应用程序的示例二、Node.js中的npm三、yarn包管理器四、REPL环境总结一、Nod...
    99+
    2024-04-02
  • java string对象上的操作,常见的用法你知道吗
    目录stringstring对象上的操作 1.判断是否为空2.size()/length(); 3.s[n]4.s1+s25.s1 = s26.s1 == s27...
    99+
    2024-04-02
  • 你知道Java IDE中如何优化数组操作吗?
    Java作为一种广泛使用的编程语言,数组是程序中常见的数据结构之一。在Java IDE中,优化数组操作可以提高程序的性能和效率,使程序更加稳定和可靠。本文将介绍一些优化数组操作的方法和技巧,帮助Java开发者更好地使用数组。 一、使用增强f...
    99+
    2023-09-19
    ide 数组 npm
  • jQuery的事件处理你知道多少
    目录一、jQuery的事件处理1、页面载入事件2、事件绑定(bind)3、反绑定事件(unbind)4、一次性事件绑定(one)5、模拟鼠标悬停(hover)总结一、jQuery的事...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作