在前面我們已經了解了元件,現在我們要來多加說明 props
這個屬性props
是由外而內傳遞資料所使用的屬性
有時候我們傳遞的資料也許是需要數值型態來計算的,這時候我們該如何來定義型別?
下面我們有一個 prop-type
的元件,動態綁著 props
傳遞過來的資料 cash
<div id="app">
<h2>Props 的型別</h2>
<prop-type :cash="cash"></prop-type>
</div>
<script type="text/x-template" id="propType">
<div>
<input type="number" class="form-control" v-model="newCash">
{{ typeof(cash)}}
</div>
</script>
<script>
Vue.component('prop-type', {
props: ['cash'],
template: '#propType',
data: function() {
return {
newCash: this.cash
}
}
});
var app = new Vue({
el: '#app',
data: {
cash: '300'
}
});
</script>
這個時候會發現,我們的型別會是字串,那如果我們想要在傳遞時就給它定義數值型別呢?
這個時候我們就可以改寫一下 props
的部分:
<script>
Vue.component('prop-type', {
props: {
cash: {
type: Number,
}
},
template: '#propType',
data: function() {
return {
newCash: this.cash
}
}
});
var app = new Vue({
...
});
</script>
我們把 props
改成物件型態,並把要接受過來的 cash
也寫成物件,並給予 type
屬性為 Number
這時候數值型別就定義好了,可是會發現,畫面上還是顯示字串,這個時候我們就可以檢查 Vue
應用程式內的 data
的 cash
就會發現竟然是字串!!! 這時候把它改寫成 cash: 300
寫成數值就可以了
如果我們在元件並沒有動態綁定要傳遞的資料,如下:
<div id="app">
<h2>Props 的型別</h2>
<prop-type></prop-type>
</div>
這時候我們可以在 props
內的 cash
物件,多加一個 default
屬性,並給它一個數值,這個就是當元件沒有綁定要傳遞的資料,預設要給予多少數值:
<script>
Vue.component('prop-type', {
props: {
cash: {
type: Number,
default: 300,
}
},
template: '#propType',
data: function() {
return {
newCash: this.cash
}
}
});
var app = new Vue({
...
});
</script>
另外一種情況是靜態與動態傳入數值的差異性,如下:
<div id="app">
<h2 class="mt-3">靜態與動態傳入數值差異</h2>
<prop-type cash="300"></prop-type>
</div>
如果我們是採用靜態的方式直接傳入數值,會發現型態仍然是字串,但如果我們把它改成動態的:
<div id="app">
<h2 class="mt-3">靜態與動態傳入數值差異</h2>
<prop-type :cash="300"></prop-type>
</div>
即在 cash
加上 :
(v-bind)
就會發現會自動轉型成數值傳遞了,這是比較值得注意的一點