組件(Components)是可重用的代碼塊,可以同時具有結構和功能。
它們有助於創建更加模塊化和可維護的代碼庫。
每個components
可能會有Hender
、Side
、content
等組件,每個components
又包含了其它的像導覽列、文章之類的components
,通常一個應用會以一棵嵌套的組件樹的形式來組織。
可以用在任 new Vue
的模板中
<div id="app">
<my-component-name></my-component-name>
</div>
下圖中的 my-component-name
是 自訂的 components
的名子
Vue.component('my-component-name',{
template: '<div><p>{{mesg}}</p><button @click="date">按我看看時間</button></div>',
data(){
return {
mesg:'現在幾點呢?'
}
},
methods:{
date(){
alert(new Date())
}
}
})
new Vue({ el: '#app' })
用 JavaScript
對象來定義組件
然後在 components
選項中定義你想要使用的組件
var child ={
template: '<div><p>{{mesg}}</p><button @click="date">按我看看時間</button></div>',
data(){
return {
mesg:'現在幾點呢?'
}
},
methods:{
date(){
alert(new Date())
}
}
}
new Vue({
el: '#app' ,
components : {
'my-component-name': child
}
})
字串 模版 (String Template)
DOM 模版 (DOM Template)
如圖 就是直接把字串塞入 Template
中
但是這樣就會使程式碼有點難閱讀
將模板被定義在例如 html
文件中的 <script>
標籤裡<script>
標籤使用 <text/x-template 標記>
,並由組件定義的 id
引用
<div id="app">
<table class="table">
<thead>
</thead>
<tbody>
<tr is="my-component" v-for="(item,id) in foods" :food="item" :key="id"></tr>
</tbody>
</table>
</div>
<script type="text/x-template" id="myComponent">
<tr>
<th></th>
<th>{{food.name}}</th>
<th>{{food.price}}</th>
</tr>
</script>
Vue.component('my-component', {
template: '#myComponent',
props :['food']
})
new Vue({
el: '#app' ,
data:{
foods:[
{
name : '薯條',
price: 20,
},
{
name: '甜不辣',
price : 20,
},
{
name: '雞排',
price : 55
}
]
}
})
上面範例中有使用 :is
來動態綁定渲染的模版,is
屬性可解決在特定 HTML
標籤包含格式下的問題,
例如像是<ul>、<ol>、<table>、<select>
這樣的元素裡允許包含的元素有限制而非客製化標籤。
感謝分享
補充 new Vue() 是 Vue 2 的語法,
Vue 3 用 Vue.createApp() 取代 new Vue()
https://book.vue.tw/appendix/migration.html#%E5%85%83%E4%BB%B6%E5%AF%A6%E9%AB%94%E5%BB%BA%E7%AB%8B
Vue 2 support will end on Dec 31, 2023. Learn more about Vue 2 Extended LTS.
The Benefits of the New Vue 3 App Initialization Code