• 基本应用
  • 修饰符
  • 为什么要在HTML中使用事件监听
  • Demo

一、基本应用

1.通过v-on指令绑定事件,例如: <button v-on:click="">提交</button> ;

在vue官方教程上第一个示例是直接在表达式中写入一个可执行计算代码:

<button v-on:click="conter += 1">add 1</button>
//conter是一个data数据,触发点击事件后可以直接将计算的最新结果渲染到页面

2.通过methods实现事件函数绑定,例如:

 <div id="example">
<button v-on:click="greet">Greet</button>
</div>
<script>
var vm = new Vue({
el:"#example",
data:{
name:"vuejs"
},
methods:{
greet(event){
alert("hello!" + event.target.tagName + "的" + this.name + "事件click");
}
}
});
</script>

2.给事件函数传递参数:这是后就需要使用变量$event实现传入事件源对象了。

 <button v-on:click="greet('vuejs',$event)">Greet</button>
greet(message,event){
alert("hello!" + event.target.tagName + "的" + message + "事件click");
}

二、修饰符

  • 事件修饰符
  • 按键修饰符与按键码
  • 系统修饰符
  • exact修饰符
  • 鼠标按钮修饰符

修饰符可以理解为处理相关事件的特殊情况,实现方法就是在事件名称后面以后缀的形式添加指定的修饰符。

1.事件修饰符:https://cn.vuejs.org/v2/guide/events.html#事件修饰符

.stop:阻止单击事件继续传播;

.prevent:只有修饰符,提交事件不再重载页面,修饰符可串联;

.capture:添加事件监听器时使用事件捕获模式,即元素自身触发的事件先在自身处理,然后交由内部元素进行处理;

.self:只有在event.target是当前元素自身时出发处理函数,即事件不是从内部元素触发的;

.once:点击事件将只触发一次;

.passice:滚动事件会立即触发,不会等待其他串联事件。即prevent会失效。

2.按键修饰符与按键码

.enter:只有在‘key’是‘Enter’时调用事件处理函数 <input v-on:keyup.enter="submit"> ;

.kebab-case:可以将keyboardEvent.key暴露的任意有效按键名转换为kebab-case来作为修饰符,意思是通过串联符‘-’来表示键盘上的驼峰命名按键事件,实现$event.tey指定键盘上驼峰命名按钮事件,例如: <input v-on:keyup.page-down="onPageDown"> ;

按键别名:

.enter:回车键;

.tab:TAB键;

.delete:删除和退格键;

.esc:终止键;

.space:删除键;

方向键:.up、.down、left、.right;

还可以通过Vue全局上的config.keyCodes对象自定义按键修饰符别名:例如 Vue.config.keyCodes.f1 = 112 ;

3.系统修饰键

.ctrl、.alt、.shift、.meta;前面三个键都能对应的上,meta是“窗口键”,在window上是window图标的那个键,其它系统大家对号入座。

通过系统修饰键组合按键指令:例如:

 <!-- Alt + C -->
<input @keyup.alt.67="clear"> <!-- Ctrl + Click -->
<div @click.ctrl="doSomething">Do something</div>

这时候就会有新的问题产生,如果需要单独的系统按键的事件怎么办呢?Vue提供了.exact修饰符:

 .exact 修饰符允许你控制由精确的系统修饰符组合触发的事件。

 <!-- 即使 Alt 或 Shift 被一同按下时也会触发 -->
<button @click.ctrl="onClick">A</button> <!-- 有且只有 Ctrl 被按下的时候才触发 -->
<button @click.ctrl.exact="onCtrlClick">A</button> <!-- 没有任何系统修饰符被按下的时候才触发 -->
<button @click.exact="onClick">A</button>

4.鼠标按钮修饰符2.2.0版本

.left、.right、.middle

三、为什么要在HTML中使用事件监听

我们通常在描述vue时都会说它是一个数据驱动的框架,而这种事件监听的方式违背了这个说法,但不必担心,因为所有的 Vue.js 事件处理方法和表达式都严格绑定在当前视图的 ViewModel 上,它不会导致任何维护上的困难。实际上,使用 v-on 有几个好处:

  1. 扫一眼 HTML 模板便能轻松定位在 JavaScript 代码里对应的方法。

  2. 因为你无须在 JavaScript 里手动绑定事件,你的 ViewModel 代码可以是非常纯粹的逻辑,和 DOM 完全解耦,更易于测试。

  3. 当一个 ViewModel 被销毁时,所有的事件处理器都会自动被删除。你无须担心如何清理它们。

四、demo

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
<script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script>
<style>
*{
list-style:lower-alpha;
}
</style>
</head>
<body>
<div id="app">
<input type="text" v-model.trim="taskText" v-on:change="addTask">
<button v-on:click="accomplishTaskList">提交</button>
<span>{{prompt}}</span>
<ul>
<li v-for="(item, key) in newTask" v-bind:key="item">
<span>{{item}}</span>
<button v-on:click="accomplishTask(key)">X</button>
</li>
</ul>
<h3>已完成任务</h3>
<ul>
<li v-for="item in taskList">{{item}}</li>
</ul>
</div>
<script>
var vm = new Vue({
el:"#app",
data:{
taskText:"",
newTask:[],
taskList:[],
prompt:""
},
methods:{
addTask(){ if(this.taskText == ""){
this.prompt = "输入不能为空";
return;
}else if(this.newTask.includes(this.taskText) || this.taskList.includes(this.taskText)){
this.prompt = "不能重复输入任务";
}else{
this.newTask.unshift(this.taskText);
// this.newTask.unshift(this.taskText);
this.taskText = "";
}
},
accomplishTask(index){
const val = this.newTask.splice(index,1);
this.taskList.push(...val);
},
accomplishTaskList(){
const valList = this.newTask.splice(0);
this.taskList.push(...valList);
}
}
});
</script>
</body>
</html>

vue入门:(事件处理)的更多相关文章

  1. Vue入门系列(四)之Vue事件处理

    Vue官网: https://cn.vuejs.org/v2/guide/forms.html#基础用法 [入门系列] (一)  http://www.cnblogs.com/gdsblog/p/78 ...

  2. 【04】Vue 之 事件处理

    4.1. 监听事件的Vue处理 Vue提供了协助我们为标签绑定时间的方法,当然我们可以直接用dom原生的方式去绑定事件.Vue提供的指令进行绑定也是非常方便,而且能让ViewModel更简洁,逻辑更彻 ...

  3. vue入门教程 (vueJS2.X)

    vue入门教程vueJS2.X 写在前面 看完此教程可以达到:能看懂并能修改简单的vue项目. 看的过程中,请把所有例子都放到html文件中跑一遍. Vue.js 是什么 Vue.js(读音 /vju ...

  4. wepack+sass+vue 入门教程(三)

    十一.安装sass文件转换为css需要的相关依赖包 npm install --save-dev sass-loader style-loader css-loader loader的作用是辅助web ...

  5. wepack+sass+vue 入门教程(二)

    六.新建webpack配置文件 webpack.config.js 文件整体框架内容如下,后续会详细说明每个配置项的配置 webpack.config.js直接放在项目demo目录下 module.e ...

  6. wepack+sass+vue 入门教程(一)

    一.安装node.js node.js是基础,必须先安装.而且最新版的node.js,已经集成了npm. 下载地址 node安装,一路按默认即可. 二.全局安装webpack npm install ...

  7. vue入门学习(基础篇)

    vue入门学习总结: vue的一个组件包括三部分:template.style.script. vue的数据在data中定义使用. 数据渲染指令:v-text.v-html.{{}}. 隐藏未编译的标 ...

  8. VUE 入门笔记

    前端的MVVM概念今年来也算是如火如荼,了解完 MVVM的概念,也该找个去尝试下 首先我先试了下 国内小而美的 VUE 试着照着文档敲出入门文件,内容都在注释里 <!doctype html&g ...

  9. Vue 入门指南 JS

    Vue 入门指南 章节导航 英文:http://vuejs.org/guide/index.html 介绍 vue.js 是用来构建web应用接口的一个库 技术上,Vue.js 重点集中在MVVM模式 ...

随机推荐

  1. linux内核中的MFD子系统

    分析用的内核版本为5.1.3 1.MFD全称 Multi-function Device,多功能设备 2. 为何会出现MFD子系统 由于出现了一类具有多种功能的外围设备或cpu内部集成的硬件模块 3. ...

  2. rally使用tempest进行测试

    安装 通过Rally进行Tempest测试,执行如下命令创建tempest实例,Rally会自动同步tempest代码至本地: rally verify create-verifier --name ...

  3. MySQL主从双向同步

    最近部署测试环境,涉及到MySQL数据库主从双向同步的部署,记录一下部署过程,正常读写都发生在主库,从库作为备选数据库(热备份),当主库发生异常,数据库自动切换到从库,这里面是怎么监控数据库异常并触发 ...

  4. 009-centos6.6 用户以及组操作

    1.查看用户所属组 id admin uid=500(admin) gid=500(admin) 组=500(admin) 2.查看用户信息 用户列表文件:cat /etc/passwd 查看系统中有 ...

  5. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-9.使用JWT生成用户Token回写客户端

    笔记 9.使用JWT生成用户Token回写客户端     简介:讲解用户授权登录后,需要生成登录凭证重定向到页面上 1.获取当前页面访问地址 2.根据User基本信息生成token 3.重定向到指定页 ...

  6. 小D课堂 - 新版本微服务springcloud+Docker教程_4-05 微服务调用方式之feign 实战 订单调用商品服务

    笔记 5.微服务调用方式之feign 实战 订单调用商品服务     简介:改造电商项目 订单服务 调用商品服务获取商品信息         Feign: 伪RPC客户端(本质还是用http)    ...

  7. hive端建表中文注释乱码

    背景:mysql编码是utf-8,mysql中建库建表中文显示都正常,但在hive窗口中建表时字段中文注释均乱码的问题. 问题:hive中建表后字段中文注释显示异常. 1. 定位 mysql 端问题 ...

  8. Paper Mark

    BigCowPeking的CSDN博客 https://blog.csdn.net/wfei101/article/category/7120809 Low Rank Structure of Lea ...

  9. —Entity Framework实例详解

    Entity Framework Code First的默认行为是使用一系列约定将POCO类映射到表.然而,有时候,不能也不想遵循这些约定,那就需要重写它们.重写默认约定有两种方式:Data Anno ...

  10. python基础知识(循环语句)

    for循环.while循环.循环嵌套 for 迭代变量 In 对象: 循环体 range(start,end,step) 第一个和第三个可以省略生成一系列的连续整数 start 包括起始值 end  ...