Vue實戰(zhàn)指南之依賴注入(provide / inject)

案例

UI美眉說咱家的選項菜單太丑了华匾,小哥哥能不能美化一下呀,灑家自然是說小意思啦~
自定義一個select組件浅侨,so easy~

簡單粗暴型:

<el-select v-model="favourite" :option="[]"></el-select>

option作為數(shù)據(jù)進來就ok啦纽谒。

然后發(fā)現(xiàn)下列問題:

  • key-value,不是所有的接口都是id-name
  • optiondisabled 怎么辦如输?
  • option存在幾種情況怎么辦佛舱?
  • ...

回頭看看原生的寫法是這樣:

<select v-model="favourite">
    <option value="1">Vue</option>
    <option value="2">React</option>
    <option value="3">Angular</option>
</select>

還要加個el-option組件,靈活自由型:

<el-select v-model="favourite">
    <el-option value="1">Vue</el-option>
    <el-option value="2">React</el-option>
    <el-option value="3">Angular</el-option>
</el-select>

好啦挨决,這樣設(shè)計就能完美解決之前的幾個問題。
接著要解決選擇了某一個el-option订歪,怎么告訴el-select脖祈,$parent是一種選擇,那么el-select當(dāng)前的值又怎么告訴el-option你被選中了呢~ 筆者沒有繼續(xù)去深究刷晋,因為看到了APIprovide/inject

官方說明:

允許一個祖先組件向其所有子孫后代注入一個依賴盖高,不論組件層次有多深(這也是使用$parent不好實現(xiàn)的地方)慎陵,并在起上下游關(guān)系成立的時間里始終生效。

不論組件層次有多深喻奥,這個簡直太爽了席纽,不用再關(guān)心dom層級,只要在祖先組件內(nèi)部就可以一直使用祖先組件提供的provide

用法

下面貼出一部分select的實現(xiàn):

  • provideObject | () => Object
  • injectArray<string> | { [key: string]: string | Symbol | Object }

el-select

export default {
  name: "el-select",
  provide() {
    return {
      select: this
    };
  }
}

el-option

export default {
    name:'el-option',
    inject:['select'],
    created(){
      if(this.select.value===this.value){
        this.select.label=this.label;
      }
    }
}

總結(jié)

provide/inject 是解決組件之間的通信問題的利器撞蚕,不受層級結(jié)構(gòu)的限制润梯。
但也不是隨便去濫用,通信代表著耦合:

provideinject 主要為高階插件/組件庫提供用例甥厦。并不推薦直接用于應(yīng)用程序代碼中纺铭。
官方文檔:
https://cn.vuejs.org/v2/api/#provide-inject
https://cn.vuejs.org/v2/guide/components-edge-cases.html#%E4%BE%9D%E8%B5%96%E6%B3%A8%E5%85%A5

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市刀疙,隨后出現(xiàn)的幾起案子舶赔,更是在濱河造成了極大的恐慌,老刑警劉巖谦秧,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件竟纳,死亡現(xiàn)場離奇詭異,居然都是意外死亡疚鲤,警方通過查閱死者的電腦和手機锥累,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來石咬,“玉大人揩悄,你說我怎么就攤上這事」碛疲” “怎么了删性?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長焕窝。 經(jīng)常有香客問我蹬挺,道長,這世上最難降的妖魔是什么它掂? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任巴帮,我火速辦了婚禮,結(jié)果婚禮上虐秋,老公的妹妹穿的比我還像新娘榕茧。我一直安慰自己,他們只是感情好客给,可當(dāng)我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布用押。 她就那樣靜靜地躺著,像睡著了一般靶剑。 火紅的嫁衣襯著肌膚如雪蜻拨。 梳的紋絲不亂的頭發(fā)上池充,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天,我揣著相機與錄音缎讼,去河邊找鬼收夸。 笑死,一個胖子當(dāng)著我的面吹牛血崭,可吹牛的內(nèi)容都是我干的卧惜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼功氨,長吁一口氣:“原來是場噩夢啊……” “哼序苏!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起捷凄,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤忱详,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后跺涤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匈睁,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年桶错,在試婚紗的時候發(fā)現(xiàn)自己被綠了航唆。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡院刁,死狀恐怖糯钙,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情退腥,我是刑警寧澤任岸,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站狡刘,受9級特大地震影響享潜,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗅蔬,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一剑按、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧澜术,春花似錦艺蝴、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春锣枝,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背兰英。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工撇叁, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人畦贸。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓陨闹,卻偏偏與公主長得像,于是被迫代替她去往敵國和親薄坏。 傳聞我的和親對象是個殘疾皇子趋厉,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,713評論 2 354

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