Vuejs第八篇之Vuejs組件的定義實(shí)例解析
本文參考官方文檔整理的一篇更加細(xì)致代碼更加安全的一篇適合新手閱讀學(xué)習(xí)吧教程。
本篇資料來于官方文檔:
http://cn.vuejs.org/guide/components.html
什么是組件?
組件(Component)是 Vue.js 最強(qiáng)大的功能之一。組件可以擴(kuò)展 HTML 元素,封裝可重用的代碼。在較高層面上,組件是自定義元素,Vue.js 的編譯器為它添加特殊功能。在有些情況下,組件也可以是原生 HTML 元素的形式,以 is 特性擴(kuò)展。
組件的定義
①組件的作用:
【1】擴(kuò)展HTML元素,封裝可重用的代碼;
【2】組件是自定義元素,Vuejs的編譯器可以為其添加特殊的功能;
【3】某些情況下,組件可以是原生HTML元素的形式,以is的方式擴(kuò)展。
②寫一個(gè)標(biāo)準(zhǔn)的組件:
分為以下幾步:
【1】掛載組件的地方,需要是Vue實(shí)例所渲染的html元素,具體來說,比如上面的<div id=”app”></div>這樣的html元素及他的子節(jié)點(diǎn);
【2】定義一個(gè)組件,用
var 變量名 = Vue.extend({template:”這里是html的模板內(nèi)容”}) 這樣的形式創(chuàng)建,例如: //定義一個(gè)組件 var btn = Vue.extend({ template: "<button>這是一個(gè)按鈕</button>" })
【3】將定義的組件注冊(cè)到Vue實(shí)例上,這會(huì)讓指定標(biāo)簽,被組件的內(nèi)容所替代。
如代碼:
//注冊(cè)他到Vue實(shí)例上 Vue.component("add-button", btn);
具體而言,每一個(gè)以下這樣的標(biāo)簽(在Vue的根實(shí)例范圍內(nèi)的)
<add-button></add-button>
會(huì)被
<button>這是一個(gè)按鈕</button>
所替代。
【4】以上方法是全局注冊(cè)(每個(gè)Vue實(shí)例的add-button標(biāo)簽都會(huì)被我們定義的所替代);
解決辦法是局部注冊(cè)。
如代碼:(這是是設(shè)置了template屬性,也可以在沒有這個(gè)屬性的時(shí)候,在<div id=”app”></div>標(biāo)簽內(nèi)放置<add-button></add-button>標(biāo)簽
<div id="app"> </div> <script> //定義一個(gè)組件 var btn = Vue.extend({ template: "<button>這是一個(gè)按鈕</button>" }) Vue.component("add-button", btn); //創(chuàng)建根實(shí)例,也就是說讓Vue對(duì)這個(gè)根生效 var vm = new Vue({ el: '#app', template: "<add-button></add-button>" }); </script>
③局部注冊(cè)組件:
簡(jiǎn)單來說,只對(duì)這一個(gè)Vue實(shí)例生效,具體做法是,在注冊(cè)那一步,跳過;
然后在聲明Vue實(shí)例的時(shí)候,將添加到components這個(gè)屬性中(他是一個(gè)對(duì)象,以KV形式放置)(注意,這個(gè)單詞多一個(gè)s)
如代碼:
<div id="app"> </div> <script> //定義一個(gè)組件 var btn = Vue.extend({ template: "<button>這是一個(gè)按鈕</button>" }) //創(chuàng)建根實(shí)例,也就是說讓Vue對(duì)這個(gè)根生效 var vm = new Vue({ el: '#app', template: "<add-button></add-button>", components: { "add-button": btn } }); </script>
注:
根據(jù)官方教程,這種方法(指局部注冊(cè)),也適用于其他資源,比如指令、過濾器和過渡。
④步驟簡(jiǎn)化:
【1】定義組件和注冊(cè)組件結(jié)合起來一步完成:
//定義一個(gè)組件 Vue.component("add-button", { template: "<button>這是一個(gè)按鈕</button>" });
【2】局部注冊(cè)時(shí),定義和注冊(cè)一步完成:
//創(chuàng)建根實(shí)例,也就是說讓Vue對(duì)這個(gè)根生效 var vm = new Vue({ el: '#app', template: "<add-button></add-button>", components: { "add-button": { template: "<button>這是一個(gè)按鈕</button>" } } });
⑤data屬性
直接給組件添加data屬性是不可以的(無效);
原因在于,假如這么干,那么組件的data屬性有可能是一個(gè)對(duì)象,而這個(gè)對(duì)象也有可能是外部傳入的(例如先聲明一個(gè)對(duì)象,然后這個(gè)對(duì)象作為data的值),可能導(dǎo)致這個(gè)組件的所有副本,都共享一個(gè)對(duì)象(那個(gè)外部傳入的),這顯然是不對(duì)的。
因此,data屬性應(yīng)該是一個(gè)函數(shù),然后有一個(gè)返回值,這個(gè)返回值作為data屬性的值。
且這個(gè)返回值應(yīng)該是一個(gè)全新的對(duì)象(即深度復(fù)制的,避免多個(gè)組件共享一個(gè)對(duì)象);
如代碼:
var vm = new Vue({ el: '#app', template: "<add-button></add-button>", components: { "add-button": { template: "<button>這是一個(gè)按鈕{{btn}}</button>", data: function () { return {btn: "123"}; } } } });
另外,假如這樣的話,btn的值是一樣的(因?yàn)樗麄儗?shí)際上還是共享了一個(gè)對(duì)象)
<div id="app"> </div> <div id="app2"> </div> <script> var obj = {btn: "123"}; var vm = new Vue({ el: '#app', template: "<add-button></add-button>", components: { "add-button": { template: "<button>這是一個(gè)按鈕{{btn}}</button>", data: function () { return obj; } } } }); obj.btn = "456"; var vm2 = new Vue({ el: '#app2', template: "<add-button></add-button>", components: { "add-button": { template: "<button>這是一個(gè)按鈕{{btn}}</button>", data: function () { return obj; } } } }); </script>
注:
el屬性用在Vue.extend()中時(shí),也須是一個(gè)函數(shù)。
⑥is特性:
【1】按照官方教程,一些HTML元素對(duì)什么元素可以放在它之中是有限制的;
但實(shí)際我自己測(cè)試沒發(fā)現(xiàn)問題,所以不明白。
【2】給個(gè)URL吧,如果真出問題了我再回頭研究。
http://cn.vuejs.org/guide/components.html#u6A21_u677F_u89E3_u6790
以上所述是小編給大家介紹的Vuejs第八篇之Vuejs組件的定義實(shí)例解析,希望對(duì)大家有所幫助,如果大家有任何疑問請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!
- Vuejs第十篇之vuejs父子組件通信
- Vuejs第九篇之組件作用域及props數(shù)據(jù)傳遞實(shí)例詳解
- vueJS簡(jiǎn)單的點(diǎn)擊顯示與隱藏的效果【實(shí)現(xiàn)代碼】
- Vuejs第七篇之Vuejs過渡動(dòng)畫案例全面解析
- VueJS全面解析
- VUEJS實(shí)戰(zhàn)之構(gòu)建基礎(chǔ)并渲染出列表(1)
- VUEJS實(shí)戰(zhàn)之修復(fù)錯(cuò)誤并且美化時(shí)間(2)
- 基于Vuejs實(shí)現(xiàn)購(gòu)物車功能
- vuejs在解析時(shí)出現(xiàn)閃爍的原因及防止閃爍的方法
- vuejs指令詳解
相關(guān)文章
Vue+axios使用FormData方式向后端發(fā)送數(shù)據(jù)
在前后端分離的項(xiàng)目中經(jīng)常使用到Vue+axios通過FormData的方式向后端發(fā)送表單數(shù)據(jù),下面就來介紹一下如何實(shí)現(xiàn),感興趣的可以了解一下2023-09-09解決vue A對(duì)象賦值給B對(duì)象,修改B屬性會(huì)影響到A的問題
今天小編就為大家分享一篇解決vue A對(duì)象賦值給B對(duì)象,修改B屬性會(huì)影響到A的問題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-09-09Vue實(shí)現(xiàn)多點(diǎn)涂鴉效果的示例代碼
這篇文章主要為大家詳細(xì)介紹了如何利用Vue實(shí)現(xiàn)多點(diǎn)涂鴉效果,文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-03-03有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存
這篇文章主要介紹了有關(guān)vue 組件切換,動(dòng)態(tài)組件,組件緩存,在組件化開發(fā)模式下,我們會(huì)把整個(gè)項(xiàng)目拆分成很多組件,然后按照合理的方式組織起來,達(dá)到預(yù)期效果,下面來看看文章的詳細(xì)內(nèi)容2021-11-11部署vue+Springboot前后端分離項(xiàng)目的步驟實(shí)現(xiàn)
這篇文章主要介紹了部署vue+Springboot前后端分離項(xiàng)目的步驟實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05Vue檢測(cè)屏幕變化來改變不同的charts樣式實(shí)例
這篇文章主要介紹了Vue檢測(cè)屏幕變化來改變不同的charts樣式實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-10-10