Vue 事件监听
事件监听
v-on
使用v-on进行事件绑定监听,回调函数写在methods中。可以使用@的这种简写形式来代替v-on,当事件源无参数传递时,可省略括号。
语法如下所示:
<button @:事件=回调函数(参数)>点我</button>
下面是一个小的示例:
<body>
<div id="app">
<button @click="func">点我</button>
</div>
<script src="./vue.js"></script>
<script>
const app = new Vue({
el: "#app",
methods: {
func() {
console.log("点击事件发生了");
}
}
})
</script>
</body>
$event
事件源传入形参$event,则是当前事件对象。
<body>
<div id="app">
<button @click="func($event)">点我</button>
</div>
<script src="./vue.js"></script>
<script>
const app = new Vue({
el: "#app",
methods: {
func(ev) {
console.log(ev);
}
}
})
</script>
</body>
修饰符
.once
使用.once修饰符后,该事件只会监听一次。当执行完这一次动作后将取消监听。
<div id="app">
<button @click.once="func">点我</button>
</div>
<script src="./vue.js"></script>
<script>
const app = new Vue({
el: "#app",
methods: {
func() {
console.log("只执行一次");
}
}
})
</script>
</body>
.prevent
使用.prevent修饰符来阻止默认事件的发生:
<body>
<div id="app">
<a href="http://www.google.com/" @click.prevent="func">点我</a>
</div>
<script src="./vue.js"></script>
<script>
const app = new Vue({
el: "#app",
methods: {
func() {
console.log("不执行默认事件");
}
}
})
</script>
</body>
.stop
使用.stop修饰符阻止事件冒泡。
<style>
.f {
width: 100px;
height: 100px;
background-color: red;
text-align: center;
color: white;
display: flex;
justify-content: center;
align-items: center;
}
.s {
width: 50px;
height: 50px;
background: blue;
text-align: center;
color: white;
}
</style>
<body>
<div id="app">
<section @click="father" class="f">
<!-- 父亲事件不会触发 -->
<article @click.stop="son" class="s"></article>
</section>
</div>
<script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {},
methods: {
son() {
console.log("儿子事件触发");
},
father() {
console.log("父亲事件触发")
}
},
});
</script>
</body>
.self
使用.self修饰符,也可以防止冒泡。只有点击到自己时才触发,不会通过冒泡触发。
<style>
.f {
width: 100px;
height: 100px;
background-color: red;
text-align: center;
color: white;
display: flex;
justify-content: center;
align-items: center;
}
.s {
width: 50px;
height: 50px;
background: blue;
text-align: center;
color: white;
}
</style>
<body>
<div id="app">
<!-- 点儿子时父亲事件不会触发 -->
<section @click.self="father" class="f">
<article @click="son" class="s"></article>
</section>
</div>
<script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {},
methods: {
son() {
console.log("儿子事件触发");
},
father() {
console.log("父亲事件触发")
}
},
});
</script>
</body>
.capture
使用.capture,开启事件捕获。当子元素点击事件后,冒泡到父元素时,先执行完父元素监听事件的回调函数,再执行子元素监听事件的回调函数。
正常情况下是先执行子元素回调,再执行父元素回调
<style>
.f {
width: 100px;
height: 100px;
background-color: red;
text-align: center;
color: white;
display: flex;
justify-content: center;
align-items: center;
}
.s {
width: 50px;
height: 50px;
background: blue;
text-align: center;
color: white;
}
</style>
<body>
<div id="app">
<section @click.capture="father" class="f">
<article @click="son" class="s"></article>
</section>
</div>
<script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {},
methods: {
son() {
console.log("儿子事件触发");
},
father() {
console.log("父亲事件触发")
}
},
});
</script>
</body>
键盘修饰符
使用@事件.键位的形式,来监听用户按下的键盘键位。
当按下的键位与监听的键位相同,则执行监听回调函数。
如下示例,使用组合监听。当再输入框内按下ctrl与a键时将触发事件的回调函数。
<body>
<div id="app">
<input type="text" @keyup.ctrl.a="func">
</div>
<script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
},
methods:{
func(){
console.log("执行了");
},
},
});
</script>
</body>
鼠标修饰符
使用@事件.按键的形式,来监听用户按下的鼠标按键。
当按下的按键与监听的键位相同,则执行监听回调函数。
如下所示,当用户在特定区域内按下右键后,阻止默认的右键弹出菜单事件,并执行事件的回调函数。
<body>
<div id="app">
<section @contextmenu.prevent="func" :style={width:"300px",height:"300px",backgroundColor:"red"}>
</section>
</div>
<script src='./vue.js'></script>
<script>
"use strict";
const app = new Vue({
el: "#app",
data: {
},
methods:{
func(){
console.log("执行了");
},
},
});
</script>
</body>
修饰符连用
修饰符支持连用,如下所示:
<button @click.once.stop=func>点我</button>
意思非常明显,只执行一次,阻止默认事件。
Vue 事件监听的更多相关文章
- Vue 事件监听实现导航栏吸顶效果(页面滚动后定位)
Vue 事件监听实现导航栏吸顶效果(页面滚动后定位) Howie126313 关注 2017.11.19 15:05* 字数 100 阅读 3154评论 0喜欢 0 所说的吸顶效果就是在页面没有滑动之 ...
- 关于vue事件监听的一个问题
由于新工作需要用vue,所以最近接触最多的也是vue,因为之前一直在用react,所以对于vue上手还是很快的.我也尽量找一些他们两个的异同点,除了多了一些辅助用的方法以外,最大的不同应该是对于组件间 ...
- vue事件监听机制
vue事件是同步的.如果绑定了事件(组件标签上绑定事件) 组件的事件触发 组件调用时绑定事件 之后监听事件: $emit 抛出后活等着 $on ,如果监听到了则阻塞执行: 如果为监听到或者未绑定,则会 ...
- vue 事件监听和es6模板语法
es6模板语法的反引号是通过左上角的飘字符弄出来了,学废了吗?
- onscroll事件没有响应的原因以及vue.js中添加onscroll事件监听的方法
1 onscroll事件失效 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...
- vue样式绑定、事件监听、表单输入绑定、响应接口
1.样式绑定 操作元素的 class 列表和内联样式是数据绑定的一个常见需求.因为它们都是属性,所以我们可以用 v-bind 处理它们:只需要通过表达式计算出字符串结果即可.不过,字符串拼接麻烦且易错 ...
- vue自定义组件添加原生事件监听
注:全局或局部注册的组件称为子组件,其中声明的组件名称(如下demo中的child)是一个自定义组件 Demo1-直接给父组件添加事件监听 <!DOCTYPE html> <html ...
- Vue学习笔记(二)动态绑定、计算属性和事件监听
目录 一.为属性绑定变量 1. v-bind的基本使用 2. v-bind动态绑定class(对象语法) 3. v-bind动态绑定class(数组语法) 4. v-bind动态绑定style(对象语 ...
- vue 中监听窗口发生变化,触发监听事件, window.onresize && window.addEventListener('resize',fn) ,window.onresize无效的处理方式
// 开始这样写,不执行 window.onresize = function() { console.log('窗口发生变化') } // 改成window监听事件 window.addEventL ...
- vue中监听返回键
问题:在项目中,我们常常有需求,当用户在填写表单时,点击返回的时候,我们希望加一个弹窗,确认离开吗,确认将保存为草稿 解决方案:利用 H5的 pushstate(个人理解为增加页面栈)特性与onpop ...
随机推荐
- 使用idea的maven项目使用mybatis时遇到的坑
在使用idea的maven项目中使用mybatis时遇到的一个问题,这个问题困扰了我一段时间,所以我来这里记录一下! 出现的问题是: 我把相同的代码复制到eclipse中,在eclipse中却能正常运 ...
- 【KAWAKO】MNN-1.2.0版本交叉编译遇到的错误与解决方法
目录 在使用gcc-linaro-7.5.0-aarch64-linux-gnu.gcc-linaro-6.3.1-aarch64-linux-gnu交叉编译链对MNN1.2.0进行交叉编译的过程中, ...
- vim编辑器操作指南
编辑模式(i) yy复制行 p粘贴 dd剪切 V按行选中 u撤销 ctr+r反撤销 >>往右缩进 <<往左缩进 :/...搜索指定内容 .重复上一次命令 G回到最后一行 gg回 ...
- 线段树优化DP学习笔记 & JZOJ 孤独一生题解
在 \(DP\) 的世界里 有一种题需要单调队列优化 \(DP\) 一般在此时,\(f_i\) 和它的决策集合 \(f_j\) 在转移时 \(i\) 不和 \(j\) 粘在一起(即所有的 \(j\) ...
- 这些 JavaScript 笔试题你能答对几道?
收藏 javascript-questions 这个仓库很久了,趁着周末来锻炼下自己的 JS 基础水平 因为逐渐也在承担一些面试工作,顺便摘录一些个人觉得比较适合面试的题目和方向 事件流(捕获.冒泡) ...
- swiper弹出窗口居中效果css
position: absolute; width: 800px; left: 50%; top: 50%; transform: translate(-50%, -50%);
- JavaScript之异步编程
什么是异步 异步:Asynchronous,async是与同步synchronous,sync相对的概念. 传统单线程编程中,程序的运行是同步的,指程序运行在一个控制流之中运行.而异步的概念就是不保证 ...
- 100、 FilenameUtils
FilenameUtils import org.apache.commons.io.FilenameUtils; 测试数据 String fileDirectory = "/D:/aa/b ...
- 9.增加Marker 标记
1 <!DOCTYPE html> 2 <html lang="zh"> 3 <head> 4 <meta charset="U ...
- python + pyqt 实现的你下载css背景图片的小工具(最终版)
学习python有三个星期了,算是做的第一个小工具,其实也没必要做成图形界面,只是为的GUI学习(再说技术总归给人使用的,熟练很多shell命令只是个"匠人".) win8下面: ...