Vue自定義組件

準(zhǔn)備:

使用vue-cli新建一個(gè)webpack項(xiàng)目

注冊(cè)組件:

打開創(chuàng)建的項(xiàng)目胧后,在component文件夾中新建一個(gè)Loading文件夾上鞠,在Loading文件夾下新建兩個(gè)文件豹悬,Loading.vue和index.js.

文件目錄

其中Loading.vue為子組件模板玄括,index.js文件是用來把子組件模塊導(dǎo)出卒茬。

Loading.vue只是簡單顯示一下Loading文字岔乔,如下:


Loading.vue

接下來需要將組件注冊(cè)并導(dǎo)出酥筝,index.js代碼如下:


index.js

上面代碼第一行是導(dǎo)入組件Loading

3-7行就是注冊(cè)組件,需要注意的是Vue.component方法的第一個(gè)參數(shù)是組件使用時(shí)的名字雏门,比如我上面定義的是fire-loading,那么在使用的時(shí)候就用<fire-loading><fire-loading/>嘿歌,第二個(gè)參數(shù)就是所要注冊(cè)的組件。

最后一行則是將內(nèi)容導(dǎo)出

最后一步在main.js文件中引入


現(xiàn)在你可以在任何想用這個(gè)組件的地方插入了 組件相應(yīng)的樣式和js代碼可以直接寫在第一步中的文件之中茁影!

比如我們?cè)陧?xiàng)目自動(dòng)生成的Hello.vue中使用宙帝,


Hello.vue

顯示效果如下:


現(xiàn)在就已經(jīng)成功加載上我們自定義的組件了。

父組件傳值給子組件

首先在子組件loading.vue中聲明props,然后就可以像vue data中的數(shù)據(jù)一樣使用兩個(gè)大括號(hào)來使用它


Loading.vue

接下來在父組件中引用子組件的地方添加在上面props中聲明的屬性呼胚,屬性名需要保持一致


Hello.vue

則會(huì)看到如下效果:


如果需要?jiǎng)討B(tài)綁定到父組件的數(shù)據(jù) 只需要使用v-bind ,簡寫使用冒號(hào):?


Hello.vue

效果也是一樣的


子組件給父組件傳遞數(shù)據(jù)

父組件可以使用 props 給子組件傳遞數(shù)據(jù)茄唐,那么反過來呢?該自定義事件出場了蝇更!

使用 v-on 綁定自定義事件

每個(gè) Vue 實(shí)例都實(shí)現(xiàn)了事件接口 Events interface沪编,即:

使用 $on(eventName) 監(jiān)聽事件

使用 $emit(eventName) 觸發(fā)事件

另外,父組件可以在使用子組件的地方直接用 v-on 來監(jiān)聽子組件觸發(fā)的事件年扩。

下面我們寫個(gè)例子

首先我們?cè)谧咏M件中添加一個(gè)button蚁廓,定義一個(gè)v-on:click事件,在事件的處理函數(shù)中將該事件分發(fā)給父組件


Loading.vue

然后在父組件中插入子組件的地方使用v-on:(子組件分發(fā)的事件名稱)來獲取子組件傳遞的數(shù)據(jù)


Hello.vue

如上圖所示厨幻,我們將傳遞的數(shù)據(jù)以彈出框的形式顯示出來相嵌,效果如下


現(xiàn)在我們就成功獲取到子組件傳遞給父組件的數(shù)據(jù)了。

slot的用法

單個(gè) Slot

除非子組件模板中况脆,包含至少一個(gè)插口饭宾,否則父組件的內(nèi)容將會(huì)被丟棄。當(dāng)子組件模板中只有一個(gè)沒有屬性的 slot 時(shí)格了,父組件的內(nèi)容片段將會(huì)整個(gè)插入到子組件中 slot 所在的 DOM 位置看铆,并替換掉 slot 標(biāo)簽本身。

最初在標(biāo)簽中的任何內(nèi)容盛末,都被視為備用內(nèi)容弹惦。備用內(nèi)容在子組件作用域內(nèi)編譯,并且只有在宿主元素為空悄但,且沒有要插入的內(nèi)容時(shí)才顯示備用內(nèi)容棠隐。

下面我們來個(gè)例子

在子組件原有代碼的基礎(chǔ)上在button的下面添加一對(duì)slot標(biāo)簽


Loading.vue

在父組件中的子組件使用的地方插入一對(duì)p標(biāo)簽


Hello.vue

那么就會(huì)顯示如下效果


如果我把slot標(biāo)簽移動(dòng)到button標(biāo)簽的上面


Loading.vue

那么大家就應(yīng)該能猜到會(huì)有什么效果了吧


所以slot又會(huì)被叫做插槽

具名 Slot

元素有一個(gè)特殊的name屬性,可以用于深度定制如何分發(fā)內(nèi)容檐嚣≈螅可以給多個(gè) slot 分配不同的名字。一個(gè)具有名稱的 slot,會(huì)匹配內(nèi)容片段中有對(duì)應(yīng)slot屬性的元素报咳。

我們?cè)賮碜鰝€(gè)例子侠讯,我們?cè)谧咏M件模板中定義兩個(gè)插槽slot,一個(gè)位于頂部暑刃,一個(gè)位于底部


Loading.vue

在父組件定義兩個(gè)p標(biāo)簽


Hello.vue

顯示如下效果


代碼地址

今天就寫這么多了厢漩,后續(xù)還會(huì)堅(jiān)持,持續(xù)更新補(bǔ)充

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末岩臣,一起剝皮案震驚了整個(gè)濱河市溜嗜,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌架谎,老刑警劉巖炸宵,帶你破解...
    沈念sama閱讀 222,464評(píng)論 6 517
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谷扣,居然都是意外死亡土全,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 95,033評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門会涎,熙熙樓的掌柜王于貴愁眉苦臉地迎上來裹匙,“玉大人,你說我怎么就攤上這事末秃「乓常” “怎么了?”我有些...
    開封第一講書人閱讀 169,078評(píng)論 0 362
  • 文/不壞的土叔 我叫張陵练慕,是天一觀的道長惰匙。 經(jīng)常有香客問我,道長铃将,這世上最難降的妖魔是什么项鬼? 我笑而不...
    開封第一講書人閱讀 59,979評(píng)論 1 299
  • 正文 為了忘掉前任,我火速辦了婚禮劲阎,結(jié)果婚禮上秃臣,老公的妹妹穿的比我還像新娘。我一直安慰自己哪工,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 69,001評(píng)論 6 398
  • 文/花漫 我一把揭開白布弧哎。 她就那樣靜靜地躺著雁比,像睡著了一般。 火紅的嫁衣襯著肌膚如雪撤嫩。 梳的紋絲不亂的頭發(fā)上偎捎,一...
    開封第一講書人閱讀 52,584評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音,去河邊找鬼茴她。 笑死寻拂,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的丈牢。 我是一名探鬼主播祭钉,決...
    沈念sama閱讀 41,085評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼己沛!你這毒婦竟也來了慌核?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 40,023評(píng)論 0 277
  • 序言:老撾萬榮一對(duì)情侶失蹤申尼,失蹤者是張志新(化名)和其女友劉穎垮卓,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體师幕,經(jīng)...
    沈念sama閱讀 46,555評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡粟按,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,626評(píng)論 3 342
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了霹粥。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片灭将。...
    茶點(diǎn)故事閱讀 40,769評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖蒙挑,靈堂內(nèi)的尸體忽然破棺而出宗侦,到底是詐尸還是另有隱情,我是刑警寧澤忆蚀,帶...
    沈念sama閱讀 36,439評(píng)論 5 351
  • 正文 年R本政府宣布矾利,位于F島的核電站,受9級(jí)特大地震影響馋袜,放射性物質(zhì)發(fā)生泄漏男旗。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,115評(píng)論 3 335
  • 文/蒙蒙 一欣鳖、第九天 我趴在偏房一處隱蔽的房頂上張望察皇。 院中可真熱鬧,春花似錦泽台、人聲如沸什荣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,601評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽稻爬。三九已至,卻和暖如春蜕依,著一層夾襖步出監(jiān)牢的瞬間桅锄,已是汗流浹背琉雳。 一陣腳步聲響...
    開封第一講書人閱讀 33,702評(píng)論 1 274
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留友瘤,地道東北人翠肘。 一個(gè)月前我還...
    沈念sama閱讀 49,191評(píng)論 3 378
  • 正文 我出身青樓,卻偏偏與公主長得像辫秧,于是被迫代替她去往敵國和親束倍。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,781評(píng)論 2 361

推薦閱讀更多精彩內(nèi)容

  • 此文基于官方文檔茶没,里面部分例子有改動(dòng)肌幽,加上了一些自己的理解 什么是組件? 組件(Component)是 Vue.j...
    陸志均閱讀 3,834評(píng)論 5 14
  • 1.安裝 可以簡單地在頁面引入Vue.js作為獨(dú)立版本抓半,Vue即被注冊(cè)為全局變量喂急,可以在頁面使用了。 如果希望搭建...
    Awey閱讀 11,034評(píng)論 4 129
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容笛求,還有我對(duì)于 Vue 1.0 印象不深的內(nèi)容廊移。關(guān)于...
    云之外閱讀 5,052評(píng)論 0 29
  • Vue 實(shí)例 屬性和方法 每個(gè) Vue 實(shí)例都會(huì)代理其 data 對(duì)象里所有的屬性:var data = { a:...
    云之外閱讀 2,221評(píng)論 0 6
  • 本文章是我最近在公司的一場內(nèi)部分享的內(nèi)容。我有個(gè)習(xí)慣就是每次分享都會(huì)先將要分享的內(nèi)容寫成文章探入。所以這個(gè)文集也是用來...
    Awey閱讀 9,452評(píng)論 4 67