Vue 元素的事件处理和 DOM 元素的很相似,但是有一点语法上的不同
使用@修饰符(v-on:的缩写)+事件名的方式 给dom添加事件后面跟方法名,方法名可以直接加括号如@click="add()"里面进行传参。对应的事件处理函数必须在 methods对象中定义。
- <template>
- <div>
- <!-- 在button上定义点击事件 -->
- <button @click="hello('传入的参数')">你好</button>
- </div>
- </template>
- <script>
- export default {
-
- /**
- * methods 在vue定义 方法的属性对象
- * 所有的方法都必须在methods里面定义
- */
- methods: {
- hello (msg) {
- console.log("事件触发啦哈哈哈")
- console.log(msg)
- }
- }
- }
-
- </script>
为了更好地处理事件,Vue3提供了一些便利的事件修饰符。事件修饰符可以用于改变默认事件行为、限制事件触发条件等如.stop、.prevent、.capture、.self、.once等等。下面是一些常用的事件修饰符用法
阻止事件冒泡,即停止事件在父元素中的传播。
- <template>
- <div class="box" @click="handle2">
- <div class="box2" @click="handle"></div>
- </div>
- </template>
-
- <script>
- export default {
-
- methods: {
- handle () {
- console.log('触发')
- },
-
- handle2 () {
- console.log("冒泡")
- }
- }
- }
-
- </script>
阻止事件的默认行为,如提交表单或点击链接后的页面跳转。
- <template>
-
- <a href="https://www.baidu.com" @click.prevent="handle">百度a>
- template>
-
- <script>
- export default {
- methods: {
- handle() {
- console.log("触发");
- }
- },
- };
- script>
只触发一次事件处理方法,之后解绑事件
- <template>
- <button @click.once="handle">点击一次就失效</button>
- </template>
-
- <script>
- export default {
- methods: {
- handle() {
- console.log("触发");
- },
- },
- };
- </script>
- <template>
-
- <button @click="handle">点击button>
- template>
-
- <script>
- export default {
- methods: {
- handle(event) {
- console.log(event);
- },
- },
- };
- script>
- <template>
-
- <button @click="handle('第一个参数', $event)">点击button>
- template>
-
- <script>
- export default {
- methods: {
- handle(msg, event) {
- console.log(event);
- },
- },
- };
- script>
可以直接使用this.xx 使用data里定义的状态,或者使用this.xx()调用methods里面定义的其他函数
注意:this指向问题
- <template>
- <button @click="handle">点击</button>
- </template>
-
- <script>
- export default {
- data() {
- return {
- num: 1,
- };
- },
-
- methods: {
- handle() {
- console.log(this.num);
- this.handle2()
- },
- handle2() {
- console.log("第二个方法");
- },
- },
- };
- </script>