1. 程式人生 > >【vue】$event的理解

【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>