Vue 2.0支持組件化開發,使得頁面結構更加清晰。在Vue中,父組件可以將數據傳遞給子組件,子組件可以將數據傳回給父組件,實現了數據的雙向綁定,更加方便了數據流的管理。
在Vue中,父子組件之間通過props和$emit實現數據傳遞和事件的監聽。props是通過在父組件中將數據傳遞給子組件實現的。子組件中可以使用props屬性獲取父組件中傳遞過來的數據。例如:
<!-- 父組件 -->
<template>
<div>
<child-component :message="hello"></child-component>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
data () {
return {
hello: 'Hello,Vue!'
}
}
}
</script>
<!-- 子組件 -->
<template>
<p>{{ message }}</p>
</template>
<script>
export default {
props: {
message: {
type: String,
required: true
}
}
}
</script>
在上面的例子中,父組件通過在子組件標簽中使用:綁定message屬性將數據傳遞給了子組件,而子組件中則使用props獲取了對應的屬性值。需要注意的是,在props中定義的屬性,如果沒有進行類型的聲明,Vue會自動將其轉換為字符串類型。
在子組件中修改父組件中的數據需要使用$emit來觸發事件,將數據傳遞回父組件。例如:
<!-- 父組件 -->
<template>
<div>
<child-component :message.sync="hello"></child-component>
</div>
</template>
<script>
import ChildComponent from './ChildComponent.vue'
export default {
components: {
ChildComponent
},
data () {
return {
hello: 'Hello,Vue!'
}
}
}
</script>
<!-- 子組件 -->
<template>
<button @click="changeMessage">點擊修改消息</button>
</template>
<script>
export default {
props: {
message: {
type: String,
required: true
}
},
methods: {
changeMessage () {
this.$emit('update:message', 'Hello,World!')
}
}
}
</script>
在上面的例子中,父組件中通過使用.sync修飾符使得子組件中修改父組件中的數據時,可以直接使用$emit('update:屬性名')來觸發事件。需要注意的是,在子組件中通過$emit觸發的事件,名稱應當與使用.sync修飾符的屬性名稱保持一致。
總而言之,組件的使用可以更加方便實現代碼的重用,同時也使得UI界面的結構更加清晰。而父子組件之間的數據交互,則是實現Vue數據雙向綁定的重要方式。
上一篇vue3專欄