事件基础内容:
- 属性绑定
举例
<!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> 事件 </title>
<script src="../../basic-source/vue.js"></script>
</head>
<body>
<div id="app">
<h3> 事件添加 </h3>
<button v-on:click = "changeMsg">
{{ msg }}
</button>
<button @click = "changeMsg">
{{ msg }}
</button>
<hr>
<h3> 事件传参 </h3>
<button @click = "argHandler('hello 骏哥~~~')">
eventArgument
</button>
<hr>
<h3> 事件对象 </h3>
<button @click = "eventHandler">
event
</button>
<hr>
<h3> 事件多个参数 </h3>
<button @click = "evHandler('骏哥',$event)">
args
</button>
</div>
</body>
<script>
new Vue({
el: '#app',
data: {
msg: 'hello vue.js'
},
methods: {
/* 一个key 就是一个方法 */
changeMsg(){
this.msg = 'hello 我骏哥~~~'
},
argHandler(value){
alert(value)
},
eventHandler(e){
console.log(e)
},
evHandler(arg,e){
console.log(arg)
console.log(e)
}
}
})
</script>
</html>
<!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> 事件的高级部分 </title>
<script src="../../basic-source/vue.js"></script>
<style>
#app div {
width: 200px;
height: 200px;
background: red;
}
#app p {
width: 100px;
height: 100px;
background: blue;
}
</style>
</head>
<body>
<div id="app">
<button @click='destory'> 销毁 </button>
<div @click.self="bigHandler" v-if="f">
<p @click.stop='smallHandler'></p>
</div>
<!--
<input type="text" @keyup.space="submitHandler"> -->
<input type="text" @keyup.p="submitHandler">
<h3>自定义事件</h3>
<button @click="myEventHandler">
my-event
</button>
</div>
</body>
<script>
Vue.config.keyCodes.P = 80
var vm = new Vue({
data: {
f: true
},
methods: {
bigHandler(e) {
alert('bigger')
},
smallHandler(e) {
alert('small')
// e.stopPropagation()
},
submitHandler() {
alert('keyup')
},
destory() {
this.f = !this.f
},
myEventHandler() {
this.$emit('my-event')
console.log('events')
}
}
}).$mount('#app')
vm.$on('my-event', function() {
console.log('自定义事件')
})
// vm.$emit('my-event')
</script>
</html>
总结:
- 事件修饰符
举例:事件冒泡
通过举例告诉大家, e.stopPropagation()这个代码的复用性差
所以vue这边有一个解决方案: 使用事件修饰符(modify)
格式:
v-on:eventType.modify = eventFnName
类型:
.stop : 阻止冒泡行为
.prevent :阻止浏览器默认行为
.capture : 阻止捕获行为
.self : 自身触发
.once : 只执行一次
.passive : 行为结束后触发(scroll) - 按键修饰符 ( 键盘事件 keyup keydown keypress)
.enter
.tab
.delete (捕获“删除”和“退格”键)
.esc
.space
.up
.down
.left
.right - 自定义按键修饰符
- 全局修改
Vue.config.keyCodes.自定义修饰符 = 键盘码
使用:
@keyup.自定义修饰符 = eventFnName - 自定义事件(自定义事件类型)
如何定义? - 使用new Vue() 的到的实例来定义
vm.$on(eventName,callback) - 如何触发呢?
vm. e m i t ( e v e n t N a m e ) t h i s . emit(eventName) this. emit(eventName)this.emit(eventName)
事件中留有一个知识点:
原生事件调用