組件的注冊
????????在?`vue`?中冻晤,我們可以通過?`new?Vue`?來創(chuàng)建一個(gè)組件屈梁,不過通常它是作為整個(gè)應(yīng)用的頂層根組件存在的褐啡,我們還可以通過另外的方式
????????來注冊一個(gè)更為通用的組件
Vue.component()
? ??????組件名稱遵循自定義組件命名規(guī)范:全小寫继控、連字符(雖然駝峰式一般也沒問題)
????????組件選項(xiàng)與?`new?Vue`?選項(xiàng)配置基本一致(也有一些細(xì)節(jié)的不同)
全局組件與局部組件
全局組件
????????通過?`Vue.component`?注冊的組件斟薇,我們稱為全局組件停巷,因?yàn)樗梢栽谌我夥秶鷥?nèi)使用
局部組件
????????在一個(gè)組件內(nèi)部通過?`components`?選項(xiàng)注冊的組件是局部組件耍攘,只能在當(dāng)前?`components`?選項(xiàng)所在的組件內(nèi)部使用
????????????????注意:局部注冊的組件只能中當(dāng)前注冊的組件中使用,不能在它的子組件中使用
data
????????在非?`new?Vue`?的組件中叠穆,`data`?必須為函數(shù)少漆,函數(shù)返回值必須是一個(gè)對象,作為組件的最終?`data`硼被,這樣復(fù)用不會(huì)修改別人的數(shù)據(jù)
props
????????組件中內(nèi)部私有數(shù)據(jù)存儲(chǔ)中組件?`data`?中示损,通過外部傳入的數(shù)據(jù),則通過?`props`?選項(xiàng)接收
組件通信
????????注意:不要修改?`props`?傳入的數(shù)據(jù)
????????????????父組件通過?`props`?傳入數(shù)據(jù)到子組件內(nèi)部嚷硫,但是子組件內(nèi)部不要修改外部傳入的?`props`检访,`vue`?提供了一種事件機(jī)制通知父級(jí)
????????????????更新,父級(jí)中使用子組件的時(shí)候監(jiān)聽對應(yīng)的事件綁定對應(yīng)的處理函數(shù)即可
父子組件通信
$emit()
????????`vue`?為每個(gè)組件對象提供了一個(gè)內(nèi)置方法?`$emit`?仔掸,它等同于自定義事件中的?`new?Event`,`trigger`?等
????????事件數(shù)據(jù)就是中觸發(fā)事件的同時(shí)攜帶傳遞的數(shù)據(jù)?-?`event`
????????????????-?父級(jí)在使用該組件的過程中脆贵,可以通過?`@事件名稱`?來注冊綁定事件函數(shù)
????????????????-?事件函數(shù)的第一個(gè)參數(shù)就是事件數(shù)據(jù)
組件雙綁的實(shí)現(xiàn)
????????雖然并不推薦在組件內(nèi)部修改?`props`?,但是起暮,有的時(shí)候確實(shí)希望組件內(nèi)部狀態(tài)變化的時(shí)候改變?`props`?卖氨,我們可以通過子組件觸發(fā)
????????事件,父級(jí)監(jiān)聽事件來達(dá)到這個(gè)目的负懦,不過過程會(huì)比較繁瑣筒捺,`vue`?提供了一些操作來簡化這個(gè)過程
v-model(不建議用,因?yàn)檎{(diào)試起來非常麻煩纸厉,很難找到問題點(diǎn)系吭,推薦使用sync,效果一樣)
????????`v-model`?是?`vue`?提供的一個(gè)用于實(shí)現(xiàn)數(shù)據(jù)雙向綁定的指令颗品,用來簡化?`props?到?data`肯尺,`data?到?props`?的操作流程
model?選項(xiàng)
????????`prop`?指定要綁定的屬性,默認(rèn)是?`value`
????????`event`?指定要綁定觸發(fā)的事件躯枢,默認(rèn)是?`input`?事件
案例2:
.sync
????????通過?`v-model`?來進(jìn)行雙向綁定则吟,會(huì)給狀態(tài)維護(hù)帶來一定的問題,因?yàn)樾薷谋容^隱蔽锄蹂,同時(shí)只能處理一個(gè)?`prop`?的綁定逾滥,我們還可以
????????通過另外一種方式來達(dá)到這個(gè)目的
update:[prop]
????????這里事件名稱要使用?`update`?加上?`prop`?名稱?的格式
案例2:
插槽slot
????????默認(rèn)情況下,組件模板解析后會(huì)替換整個(gè)組件內(nèi)容,如果我們想在組件引用被包含的內(nèi)容寨昙,可以通過?`vue`?提供的內(nèi)置組件?`slot`?來獲取
具名插槽
v-slot
????????使用內(nèi)置組件?`template`?與?`v-slot`?指令進(jìn)行配置,用來命名插槽掀亩,在組件模板中舔哪,通過?`<slot?name="插槽名字">`?來使用
作用域插槽
????????組件內(nèi)部與組件包含的內(nèi)容屬于不同的作用域(被包含的內(nèi)容是組件父級(jí)下的作用域)