在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問(wèn)答/HTML/ vue 開(kāi)發(fā)組件的時(shí)候需要外部提供一個(gè)函數(shù),哪種實(shí)現(xiàn)方式比較好?

vue 開(kāi)發(fā)組件的時(shí)候需要外部提供一個(gè)函數(shù),哪種實(shí)現(xiàn)方式比較好?

vue中,當(dāng)我們定義了一個(gè)組件compA,compA中需要一個(gè)外部函數(shù),那比較好的做法是通過(guò)props傳遞 還是 compA中emit('eventName'),然后引用compA的頁(yè)面這樣寫(xiě):<comp-a @eventName=""></comp-a>
哪種更合適呢?

我參考了elemnt-ui 的 table組件 http://element-cn.eleme.io/#/...,發(fā)現(xiàn)它以上兩種情況都有。比如sort-method,是以props的方式傳遞一個(gè)函數(shù)。當(dāng)然,更多的事件函數(shù)還是通過(guò)emit的方式,也不知道他們的考量標(biāo)準(zhǔn)是什么 ?

回答
編輯回答
陌上花

其他的樓上都說(shuō)完了 我做個(gè)愚蠢的補(bǔ)充
其實(shí)有個(gè)決定性因素是 這個(gè)函數(shù)到底會(huì)在執(zhí)行途中需要哪個(gè)域的值

prop 從父?jìng)鞯阶?br>emit 從子傳到父

例如說(shuō)子組件是一個(gè)保存按鈕 它需要一個(gè)功能是點(diǎn)擊保存后顯示加載中 并在保存完畢顯示回保存

那么 由于這個(gè)功能需要更改子組件自身的按鈕上的文字 所以 應(yīng)該由父組件prop下來(lái)一個(gè)save function 讓子組件能在使用時(shí)方便的更改自己的狀態(tài)

再例如 又是這個(gè)按鈕 它還需要實(shí)行一個(gè)功能 點(diǎn)擊后根據(jù)輸入框里的關(guān)鍵字進(jìn)行搜索 由于輸入框跟按鈕明顯是兩個(gè)組件 是父組件讓他們聯(lián)系在一起的 所以 這個(gè)點(diǎn)擊應(yīng)該是一個(gè)emit 讓子組件通知父組件 啊 我這里被點(diǎn)擊啦 然后父組件再根據(jù)輸入框內(nèi)容進(jìn)行搜索

2018年4月3日 17:56
編輯回答
貓小柒

我的理解是
props屬于父->子
$emit屬于子->父
props:我需要你使用這個(gè)值,函數(shù)屬于子組件執(zhí)行流程中的組成部分。
$emit:我通知你這個(gè)事情發(fā)生了,算是結(jié)果,后面的回調(diào)執(zhí)行不屬于子組件。

可能$emit大多是用來(lái)告知結(jié)果的吧,后續(xù)操作我不關(guān)心,函數(shù)怎么執(zhí)行屬于父組件的邏輯。

2017年4月11日 11:07
編輯回答
乖乖噠

謝邀。
prop@eventName使用的場(chǎng)景不同吧。。

  1. prop傳遞一個(gè)函數(shù)到子組件,是因?yàn)檫@個(gè)函數(shù)是需要在子組件中執(zhí)行,并且在父組件聲明的場(chǎng)景。比如你的table排序,肯定是需要在子組件進(jìn)行處理的,而排序的方法需要你自己定義...因此prop傳遞一個(gè)函數(shù)下去。
  2. @eventName的場(chǎng)景,是在子組件觸發(fā)一個(gè)事件,在父組件執(zhí)行對(duì)應(yīng)的事件函數(shù),所以函數(shù)是在父組件執(zhí)行的。比如在子組件執(zhí)行完某些參數(shù)后讓父組件執(zhí)行回調(diào)函數(shù)...
2018年4月2日 11:09