對于Vue子組件,props是十分重要的概念。props可以用來傳遞數據到子組件,實現父子組件之間的通信。
props是子組件中的一個屬性,它接受一個數組,該數組包含要從父組件中接收的屬性名稱,如下所示:
<script> export default { name: 'Child', props: ['message'] }; </script>
在此示例中,props數組包含了一個屬性——message,這意味著該組件將從其父組件接收一個名為message的值。
在父組件中使用時,可以使用v-bind指令來將數據傳遞給子組件,如下所示:
<template> <div> <child :message="'Hello'" /> </div> </template> <script> import Child from './Child.vue'; export default { name: 'Parent', components: { Child } }; </script>
在此示例中,父組件向子組件傳遞了一個名為message的屬性,其值為“Hello”。`:message="'Hello'"`這個語法意思是將“Hello”這個字符串傳遞給子組件的message屬性。
當屬性被傳遞到子組件中時,它將作為props對象的屬性。父組件傳遞給子組件的數據被保存在props中,并可以在子組件的template中使用。下面是在子組件中使用屬性的示例代碼:
<template> <div> <p>{{ message }}</p> </div> </template> <script> export default { name: 'Child', props: ['message'] }; </script>
在此示例中,子組件使用雙括號語法來顯示傳遞的消息。與大括號語法不同的是,雙括號語法可以解析JavaScript表達式。對于單獨的變量,兩種語法是等效的。
當父組件傳遞的屬性包含JavaScript表達式時,我們必須使用v-bind指令。例如,如果我們希望向子組件傳遞父組件中的計算屬性或方法,我們可以通過以下方式進行:
<template> <div> <p>{{ computedProp }}</p> <p>{{ getGreeting() }}</p> </div> </template> <script> export default { name: 'Child', props: ['computedProp', 'getGreeting'] }; </script>
在此示例中,我們可以傳遞一個計算屬性或方法給子組件,并在子組件的template中使用它們。注意!我們不需要使用v-bind指令來傳遞JavaScript表達式,這是因為屬性名稱使用了v-bind指令而存在。即使我們沒有顯式地使用v-bind指令,Vue知道應該將計算屬性或方法作為一個表達式來解析。
除了接受一個數組作為props的形式,還可以為props提供更高級的驗證。如果一個props傳遞給了子組件,但它的值不符合預期,使用驗證可以及早捕獲這種情況。有關詳細信息,請查看Vue的官方文檔。