简介
Vue里面有实例属性($data,$el),实例方法(methods),因为这两个和常用选项类似,不是很常用,所以这次主要写一下实例事件
.stop阻止冒泡
其实就是原生JS 里面的阻止冒泡.stopPropagation()的缩写
具体用法
<-html-><div @click="divClick" style="width: 100px;height: 100px;background: red;"><button @click.stop="btnClick">点击按钮</button></div><-js-><script>let app = new Vue({el: '#app',data:{},methods:{divClick(){alert('div被点击了')},btnClick(){alert('btn被点击了')}}})</script>
.self
只是作用在元素本身而非子元素的调用
具体用法
<-html-><div @click.self="divClick" style="width: 100px;height: 100px;background: red;"><button @click="btnClick">点击按钮</button></div><-js-><script>let app = new Vue({el: '#app',data:{},methods:{divClick(){alert('div被点击了')},btnClick(){alert('btn被点击了')}}})</script>
.prevent
每次提交表单都会重载页面,而.prevent 的作用就是提交事件并且不会重载页面
具体用法
<-html-><form action="" @submit.prevent="hangle"><button type="submit"> 提交表单</button></form><-js-><script>let app = new Vue({el: '#app',data:{},methods:{hangle(){alert("不会重新加载页面了")}}})</script>
.sync
<div id="app"><div>{{bar}}</div><my-comp :foo.sync="bar"></my-comp><!-- <my-comp :foo="bar" @update:foo="val => bar = val"></my-comp> --></div><script>Vue.component('my-comp', {template: '<div @click="increment">点我+1</div>',data: function() {return {copyFoo: this.foo}},props: ['foo'],methods: {increment: function() {this.$emit('update:foo', ++this.copyFoo);}}});new Vue({el: '#app',data: {bar: 0}});</script>
.once
只执行一次事件
<-html->once: <br><button @click="onceMethod">执行无限次</button><button @click.once="onceMethod">只是执行一次</button><hr><script>let app = new Vue({el: '#app',data:{},methods:{onceMethod(){alert("执行 1 次")}}})</script>
监听键盘事件
本次以enter 为例,其实还有其他的按键
.enter
.tab
.delete
具体可以看 按键修饰符
<-html->监听键盘事件:<br><input @keyup.13 ="submitMe"><input @keyup.enter ="submitMe"><script>let app = new Vue({el: '#app',data:{},methods:{submitMe() {alert('按下了enter键')}}})</script>
完整代码示例
<!DOCTYPE html><html lang="en"><head><meta charset="UTF-8"><title>方法与事件</title></head><body><div id="app"><hr>stop用法: <br><div @click.self="divclick" style="height: 100px;width: 100px;background-color: blue"><button @click="btnlcick">点击</button></div><hr>prevent的用法:每次提交表单都会重载页面<form action="" @submit.prevent="hangle"><button type="submit"> 提交表单</button></form><hr>once: <br><button @click="onceMethod">执行无限次</button><button @click.once="onceMethod">只是执行一次</button><hr>监听键盘事件:<br><input @keyup.13 ="submitMe"><input @keyup.enter ="submitMe"></div><script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script><script>var app = new Vue({el:"#app",data:{count: 0},methods:{divclick:function () {alert('div被点击了')},btnlcick:function () {alert('BUTTON被点击了')},hangle:function () {alert('我不重载了,页面也不刷心了')},onceMethod:function () {alert('多少次了?')},submitMe:function () {alert('您按下了enter键')}}})</script></body></html>
其他的实例事件
$on(在构造器外部添加事件)
$on接收两个参数,第一个参数是调用时的事件名称,第二个参数是一个匿名方法
app.$on('reduce',function(){console.log('执行了reduce()');this.count--;});
$off(关闭事件)
function off(){console.log('关闭事件');app.$off('reduce');}
$emit(事件调用)
function reduce() {// 事件调用console.log('emit事件调用');app.$emit('reduce');}
