vue3教程:v-on指令监听事件

介绍

html 的button元素,使用 onclick 添加点击事件

在vue中,通过 v-on 指令监听事件

点击事件:<input type="button" v-on:click="modify" >

缩写

v-on:缩写成 @

例子:

<input type="button" @click="modify" value="切换(缩写)">

简单例子

<div id="app">
    <input type="button" v-on:click="show" value="弹出对话框">
    <input type="button" @click="show" value="弹出对话框2">
</div>

<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script>
<script type="importmap">
{
    "imports": {
        "vue": "./js/vue.esm-browser@3.5.13.js"
    }
}
</script>
<script type="module">
  import { createApp } from 'vue'

  createApp({
    data: function(){
        return{
            books: []
        }
    },
    methods:{ // 在 methods 对象中定义方法
        show:function(){
            alert("点击事件")
        }
    }

  }).mount('#app')
</script>

事件对象例子

方法的第一个参数,是 事件对象,通过该事件对象,可以获得 发出事件的控件对象

<div id="app">
    <input type="button" v-on:click="show" value="弹出对话框">
    <input type="button" @click="show" value="弹出对话框2">
</div>

<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script>
<script type="importmap">
{
    "imports": {
        "vue": "./js/vue.esm-browser@3.5.13.js"
    }
}
</script>
<script type="module">
  import { createApp } from 'vue'

  createApp({
    data: function(){
        return{
            books: []
        }
    },
    methods:{ // 在 methods 对象中定义方法
        show:function(event){//第一个参数是事件对象
            console.log(event)
            console.log(event.target)// 获取发出事件的控件对象
            event.target.value='修改名字' // 修改按钮名字
        }
    }

  }).mount('#app')
</script>

参数例子

控件传递参数时,需要传参 $event,表示传递 事件对象

<div id="app">
    只传参:<input type="button" v-on:click="show('hello 李雷')" value="弹出对话框"><br>
    传事件对象和参数:<input type="button" @click="show2($event,'hello 韩梅梅')" value="弹出对话框2">
</div>

<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script>
<script type="importmap">
{
    "imports": {
        "vue": "./js/vue.esm-browser@3.5.13.js"
    }
}
</script>
<script type="module">
  import { createApp } from 'vue'

  createApp({
    data: function(){
        return{
            books: []
        }
    },
    methods:{ // 在 methods 对象中定义方法
        show:function(msg){//第一个参数是事件对象
            alert(msg)
        },
        show2:function(event,msg){//第一个参数是事件对象
            console.log(event)
            console.log(event.target.value)
            event.target.value='修改名字' // 修改按钮名字
            alert(msg)
        }
    }

  }).mount('#app')
</script>

切换按钮例子

<style>
    [v-cloak] {
        display: none;
        }
</style>
<div id="app" v-cloak>
    <a v-bind:href="url">{{name}}</a>
    <input type="button" v-on:click="modify" value="切换">
    <input type="button" @click="modify" value="切换(缩写)">
</div>

<script src="https://unpkg.com/axios@0.21.1/dist/axios.min.js"></script>
<script type="importmap">
{
    "imports": {
        "vue": "./js/vue.esm-browser@3.5.13.js"
    }
}
</script>
<script type="module">
  import { createApp } from 'vue'

  createApp({
    data: function(){
        return{
            name: "百度",
            url: "http://www.baidu.com"
        }
    },
    methods:{ // 在 methods 对象中定义方法
        modify:function(){
            this.name="马老师"
            this.url="http://www.malaoshi.top"
        }
    }

  }).mount('#app')
</script>

原文出处:/show_1GWMC1sLYgU.html