Vue指令之v-on

news/2024/7/2 23:31:41

v-on指令用于注册事件,作用是添加监听与提供事件触发后对应的处理函数。

v-on有两种语法,在提供处理函数的时候既可以直接使用内联语句,也可以提供函数的名字。

第一种语法是直接提供内联语句,如下

v-on:事件名 = "内联语句"

Tips:注意v-on:的冒号后面不要加空格,加上之后会导致事件不响应。

举个例子,要实现两个加减按钮控制显示数字的增减,可以如下编写代码:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <div id="app">
        <!-- 按钮,v-on:后别加空格 -->
        <button v-on:click="number--">-</button>
        <!-- sapn是小盒子,一行可以多个(div是大盒子,一行只能有一个) -->
        <span>{{ number }}</span>
        <button v-on:click="number++">+</button>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                number: 100,
            }
        })
    </script>
</body>
</html>

v-on:click表示监听点击事件,而等号后面则是出现了点击事件后要执行的语句。渲染后效果如下,可以点击按钮实现数字的增减。
在这里插入图片描述
click换成其他事件同样成立,比如鼠标进入事件mouseenter

同时,v-on:可以简写成@,如下,可以实现同样的功能。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <div id="app">
        <!-- 按钮 -->
        <button @mouseenter="number--">-</button>
        <!-- sapn是小盒子,一行可以多个(div是大盒子,一行只能有一个) -->
        <span>{{ number }}</span>
        <button @mouseenter="number++">+</button>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                number: 100,
            }
        })
    </script>
</body>
</html>

显然,直接写内联语句适用于一些简单的功能,而复杂的功能则最好用函数来写,因此v-on的第二种语法就是传入函数名,改函数名应在实例化Vue实例的时候由methods属性提供。

v-on:事件名 = "methods中的函数名"

在下面的例子中,我们用一个按钮来控制文本的显示/隐藏,将该功能写在methods中的函数reverse中,使得控制该文本显示的变量翻转。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <div id="app">
        <!-- 传入函数名reverse -->
        <button @click="reverse">display/hide</button>
        <div v-show="isShown">ShadyPi</div>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                isShown: true,
            },
            methods: {
                reverse () {
                    //注意这里要加app.或this.,否则找不到该变量
                    this.isShown = !this.isShown
                    console.log("click button")
                }
            }
        })
    </script>
</body>
</html>

点击按钮,即可控制文本显示隐藏,同时控制台输出调试信息。
在这里插入图片描述
自然地,这个函数也可以有参数传入,比如设置多个按钮,一个+3,一个+10.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>
<body>
    <script src="https://cdn.jsdelivr.net/npm/vue@2.7.14/dist/vue.js"></script>
    <div id="app">
        <div>{{ number }}</div>
        <button @click="add(3)">+3</button>
        <button @click="add(10)">+10</button>
    </div>
    <script>
        const app = new Vue({
            el: "#app",
            data: {
                number: 100,
            },
            methods: {
                add (delta) {
                    this.number += delta
                }
            }
        })
    </script>
</body>
</html>

可以实现为数字加上不同的值得功能。
在这里插入图片描述


http://lihuaxi.xjx100.cn/news/1891093.html

相关文章

USB设备共享服务USB Redirector如何安装并结合内网穿透实现远程共享和访问USB设备

文章目录 前言1. 安装下载软件1.1 内网安装使用USB Redirector1.2 下载安装cpolar内网穿透 2. 完成USB Redirector服务端和客户端映射连接3. 设置固定的公网地址 前言 USB Redirector是一款方便易用的USB设备共享服务应用程序&#xff0c;它提供了共享和访问本地或互联网上的U…

2023 年全国网络安全行业职业技能大赛---数据操作安全管理员比赛样题

2023 年全国网络安全行业职业技能大赛--数据操作安全管理员比赛样题 2023 年全国网络安全行业职业技能大赛--数据操作安全管理员比赛样题项目介绍&#xff1a;选手指南&#xff1a;任务目标&#xff1a;第一部分:数据安全防护(30%)第二部分:数据安全管理(30%)第三部分:数据安全…

04 python函数

4.1 函数的快速开发体验 """ 演示&#xff0c;快速体验函数的开发和使用 """#需求&#xff0c;统计字符串的长度&#xff0c;不使用内置函数len()str1 itheima str2 itcast str3 python#定义一个计数的变量 count 0 for i in str1:count 1…

如何使用 Redis 快速实现分布式锁?

本文我们来讨论如何使用 Redis 快速实现分布式锁。 分布式锁有很多种解决方案&#xff0c;前面简单介绍过&#xff0c;Redis 可以通过 set key 方式来实现分布式锁&#xff0c;但实际情况要更加复杂&#xff0c;比如如何确保临界资源的串行执行&#xff0c;如何及时释放&#…

Arrary.asList(arr)

Arrary.asList(arr) List listArrary.asList(arr)&#xff1a;把一个数组转换成 list &#xff0c;本质还是数组&#xff0c;就是用 list 给 arr 包了一层 不能用 add&#xff0c;remove 这些 list 的方法 基本类型的情况下调用 size() 不准确 更改数组 s &#xff0c;列表 …

react中使用ref属性获取元素,并判断该元素内是否含有子元素

在react中&#xff0c;可以使用ref属性来获取到一个元素的引用&#xff0c;然后再使用ref.current来访问该元素的DOM节点&#xff0c;使用DOM API来判断这个元素是否含有子元素&#xff0c;要判断一个元素是否含有子元素&#xff0c;可以使用hasChildNodes()&#xff0c;其返回…

【Mars3d】关于locationBar等控件的css样式冲突处理问题

【Mars3d】关于locationBar等控件的css样式冲突处理问题 问题场景&#xff1a; 1.通过代码加载new mars3d.control.Zoom(或者通过地球map初始化配置 option.control {加载放大缩小工具控件的时候&#xff0c;出现图标的样式冲突效果&#xff1a; 2.sceneModePicker&#xf…

vue3 的单文件中的命名空间组件

官网介绍 可以使用带 . 的组件标签&#xff0c;例如 <Foo.Bar> 来引用嵌套在对象属性中的组件。这在需要从单个文件中导入多个组件的时候非常有用&#xff1a; <script setup> import * as Form from ./form-components </script><template><Form…