Bootstrap

【vue】$event的理解

一、在原生dom事件里就是事件对象

注意两点

1.不使用圆括号,event被自动当作实参传入

2.使用圆括号,必须显式的传入event对象,如果不传入可能最终找到的是全局的window .event

<button v-on:click="warn('Form cannot be submitted yet.', $event)">

  Submit

</button>



// ...

methods: {

  warn: function (message, event) {

    // 用来阻止默认事件

    if (event) event.preventDefault()

    alert(message)

  }

}


 

二、自定义事件组件,就是$ emit 的第一个参数

 

 

vue中事件绑定v-on,简写可以写作@

 

 

例子一:

 

(1)vue组件发出自定义事件,这个是带参的,不带参数的去掉后边的book

       <div class="book-items">

            <div class="book" v-for="book in books" @click="$emit('select',book)">

                <div class="cover"> <img :src="book.img_url"/> </div>

                <div class="title">{{book.title}}</div>

                <div class="authors">{{book.authors | join }}</div>

            </div>

        </div>

(2)组件自定义事件在“页面”的响应,对应一个页面中的方法,这里包含传参,如果不传,一个字符串就可以了

        <div class="section">

            <!-- 新书上架 -->

            <BookList :books="page_data.promotions"

                      heading="最新更新"

                      @select="preview($event) “>

            </BookList>

        </div>

 

对应的方法:

<script>

    export default{

        。。。

        methods: {

            preview (book) {

                this.selected = book

            }

        }

    }

</script>

 

 

例子二:在input组件中起到的作用也差不多,相当于传入的第一个参数

组件内:


<template>

<div class="grid-content bg-purple-light">

    <el-input

        :placeholder="pl"

        prefix-icon="el-icon-search"

        @keyup.enter.native="$emit('search',$event.target.value)"

        :value="terms"

    >

    </el-input>

</div>

</template>

 

<script>

 

export default{

    props:["terms","pl"]

}

</script>


⚠️:因为使用了element所以这里要加一个native

 

 

外部绑定


          <MySearch :terms=“terms"  pl="请输入您要筛选的书名" @search="terms=$event">

 

          </MySearch>

 

 

    export default {

      name: 'App',

      data(){

        return{

          terms:"",

        }

      },

 

      components:{

        MySearch,

      },

    }

 

⚠️:v-on也可以在触发的时候运行一些代码,向上边的赋值,以及像这样的小逻辑<button v-on:click="counter += 1">Add 1</button>

 

;