Props被用來將狀態傳遞給子元件。在這篇文章中,我們將學習有關Props的所有內容。
在元件內部定義prop
Props是元件從包含它們的元件(父元件)接收數據的方式。
當一個元件期望一個或多個prop時,它必須在其props
屬性中定義它們:
Vue.component('user-name', {
props: ['name'],
template: '<p>Hi {{ name }}</p>'
})
或者,在Vue的Single File Component中:
<template>
<p>{{ name }}</p>
</template>
<script>
export default {
props: ['name']
}
</script>
接受多個prop
你可以通過將它們附加到陣列上來接受多個prop:
Vue.component('user-name', {
props: ['firstName', 'lastName'],
template: '<p>Hi {{ firstName }} {{ lastName }}</p>'
})
設定prop的類型
你可以通過使用物件而不是陣列來指定prop的類型,使用每個屬性的名稱作為每個屬性的鍵,類型作為值:
Vue.component('user-name', {
props: {
firstName: String,
lastName: String
},
template: '<p>Hi {{ firstName }} {{ lastName }}</p>'
})
你可以使用的有效類型有:
- String(字串)
- Number(數字)
- Boolean(布林值)
- Array(陣列)
- Object(物件)
- Date(日期)
- Function(函式)
- Symbol(符號)
當類型不匹配時,Vue會在控制台中(在開發模式下)發出警告。
屬性類型可以更詳細地指定。
你可以允許多個不同的值類型:
props: {
firstName: [String, Number]
}
設定必要的prop
你可以要求必要的prop:
props: {
firstName: {
type: String,
required: true
}
}
設定prop的預設值
你可以指定一個預設值:
props: {
firstName: {
type: String,
default: 'Unknown person'
}
}
對於物件:
props: {
name: {
type: Object,
default: {
firstName: 'Unknown',
lastName: ''
}
}
}
default
也可以是一個返回適當值的函式,而不是實際值。
你甚至可以建立一個自定義驗證器,這對於複雜的數據非常有用:
props: {
name: {
validator: name => {
return name === 'Flavio'//只允許"Flavio"
}
}
}
將prop傳遞給元件
你可以使用以下語法將prop傳遞給元件:
<ComponentName color="white" />
如果傳遞的是一個靜態值。
如果是數據屬性,你可以使用以下方式:
<template>
<ComponentName :color=color />
</template>
<script>
…
export default {
//…
data: function() {
return {
color: 'white'
}
},
//…
}
</script>
你可以在prop值中使用三元操作符來檢查一個真值條件並根據其傳遞一個值:
<template>
<ComponentName :colored="color == 'white' ? true : false" />
</template>
<script>
…
export default {
//…
data: function() {
return {
color: 'white'
}
},
//…
}
</script>