Vue父子組件傳值

Vue中,父子組件傳值遵循 props down,events up 的原則
也就是說,子組件只能只讀父組件傳過來的值,但是不能直接修改,需要傳遞一個自定義事件this.$emit()的方式去發(fā)送一個事件,讓父組件去修改子組件的值

在子組件中:

<template>
  <div>
    <Input :value="value" @input="handleInput"></Input>
  </div>
</template>
<script>
export default {
  props: {
    value: {
      type: [String, Number],
      default: ''
    }
  },
  methods: {
    handleInput(event) {
      const val = event.target.value
      this.$emit('input',val)
    }
  }
}
</script>
<style>
</style>

在父組件中:

<template>
  <div>
    <son v-model="inputValue" ></son>
    <p>{{ inputValue }}</p>
  </div>
</template>
<script>
import son from './son'
export default {
  data() {
    return {
      inputValue: ''
    }
  },
  components: {
    son
  }
}
</script>
<style>
</style>

在父組件中,其實這樣寫也是等價的:
v-model其實就是一個語法糖,把value屬性和@input結合在一起,這兩種寫法是等價的。
但是如果在子組件中通過this.$emit()發(fā)送的事件不是原生的@input事件,比如:this.$emit('son', val),于是,我們在父組件中可以這樣寫↓↓↓

<template>
  <div>
    <son :value="inputValue" @son="handleInput"></son>
    <p>{{ inputValue }}</p>
  </div>
</template>
<script>
import son from './son'
export default {
  data() {
    return {
      inputValue: ''
    }
  },
  components: {
    son
  },
  methods: {
    handleInput(val) {
      this.inputValue = val
    } 
  }
}
</script>
<style>
</style>
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容