Prop And Emit

Conceptual

  • 每個Vue實例中,實現事件接口

    • 使用$on(eventName)監聽事件

    • 使用$emit(eventName , optionalPayload)觸發事件

Prop Code

參考資料:

Parent

<template>
    <div>
        <div>父组件的toCity{{toCity}}</div>
        <train-city @showCityName="updateCity" :sendData="toCity"></train-city>
    </div>
<template>

<script>
  import TrainCity from "./train-city";
  export default {
    name:'index',
    components: {TrainCity},
    data () {
      return {
        toCity:"北京"
      }
    },
    methods:{
      updateCity(data){//触发子组件城市选择-选择城市的事件
        this.toCity = data.cityname;//改变了父组件的值
        console.log('toCity:'+this.toCity)
      }
    }
  }
</script>

Child

流程說明:

  1. 父組件在渲染畫面時,遇到 train-city組件,就去子組件找template 渲染出來

  2. 子組件遇到sendData就到props:['sendData']中找尋資料,

  3. 發現是props就去父組件找 :sendData

  4. 然後發現父組件中設定的,:sendData =" toCity" (綁定)

  5. 所以子組件的這個 sendData 就會等於 toCiry 的值。

Emit Code

參考資料:

Parent

Child(myButton4.vue)

流程說明:

  1. 在父組件渲染畫面時,會渲染出一個數值,與兩個按鈕(子組件)

  2. 當觸發第一個按鈕時(@increment1="incrementTotal1"),會到子組件找出@click="incrementCounter"

  3. 你可以把子組件想成 @increment1 = "incrementCounter"

  4. 子組件就會通知它的 methods:incrementCounter要動作囉

  5. 而子組件,就會emit(發送)消息,跟父組件說 incrementTotal1要動作了

  6. 這時父組件,就會去通知它的methods:incrementTotal1動作。

Last updated

Was this helpful?