2020 諾貝爾和平獎出爐了,吃飯真的皇帝大,可以救無數的人啊!
昨天我們介紹了如何在定義一個全域的元件,在官方的網站上有提到「全域」定義的元件會在 webpack 打包時,既使我們定義了一個全域的元件且沒使用到它,webpack 也會一起打包進去,這樣會增加使用者下載無用的元件而可能影響效能。而透過局部定義(Local Registration)的元件就可解決這樣的問題。
我們先來看一下元件定義有哪些應該要注意的:
data
必須是一個函式,以函式的形式也可形成一個閉包的形式,保證每個元件的資料都是獨立的。元件的命名方式大致上有兩種
如果使用駝峰式命名元件,那麼在使用元件的時候只能在字串模版中使用元件,但是在普通 HTML 標籤模板中,必須使用短線-的方式使用元件,也就是說如果是在自己元件的template
中使用就可以,但在元件以外的 HTML 標籤中需要插入時就必須改成短線的方式。
推薦使用短線的方式,較能統一。
範例:
<div id="app">
<!-- 會顯示錯誤 -->
<HelloWord></HelloWord>
<!-- 需改成短線命名 -->
<hello-world></hello-world>
</div>
<script>
Vue.component(HelloWord, {
data: function () {
msg:'Hi hi';
}, // data需為函式
template: '<div>{{ msg }}</div>',
});
</script>
局部定義元件的方法不需要以new
建構是來新增,直接以建立變數的方式來建立,建立之後需要到 Vue 實例裡增加一個components
的屬性,因為有可能會有一個元件以上,所以屬性名components
為複數,再將剛剛定義的局部元件寫入components
裡,並給予屬性和值,屬性的命名方式最好為小寫與下底線的形式,因為之後是用這個屬姓名來放入template
樣版中,值則為剛剛定義的局部元件的名稱
語法如下:
const ComponentA = {
/* ... */
};
const ComponentB = {
/* ... */
};
const ComponentC = {
/* ... */
};
new Vue({
el: '#app',
Data: {
components: {
// <--注意,有`s`
// 推薦使用短線的方式
'component-a': ComponentA,
'component-b': ComponentB,
'component-c': ComponentC,
},
},
});
需要注意的是,局部定義的元件只能在本身的實例裡使用,而無法在全域定義或父元件以外的地方使用。如果使用在父元件以外的地方並不會生效。
我們來看一下範例:
<div id="app">
<p>{{msg}}</p>
<hello-paris></hello-paris>
<hello-taipei></hello-taipei>
</div>
<script>
Vue.component('HelloParis', {
data: function () {
return {
msg: 'Hello France',
};
},
// <hello-taipei></hello-taipei> 無效且不會顯示出來
template: `
<div>{{msg}}
<hello-taipei></hello-taipei> 無效
</div>
`,
});
// 局部元件
const HelloTaipei = {
data: function () {
return {
msg: 'Hello Taipei',
};
},
template: '<div>{{ msg }}</div>',
};
const app = new Vue({
el: '#app',
data: {
msg: 'Hello Paris',
},
components: {
// 在實例裡註冊
'hello-taipei': HelloTaipei,
},
});
</script>
到目前為止我們都是直接使用 CDN 的方式將 Vue.js 載入我們的頁面中,但如果是使用 Cli 的開發方式,就需要使用引入import
和輸出export
的方式將這些元件引入和輸出,這裡我們不多做討論,建議可至官網詳細查閱這方面有關的使用方式。
組件註冊 模塊系統 — Vue.js
每日一句法文有益身心:La vie est belle ! --> 拉.V.ㄟ.被勒! --> 生活真美好/愜意!