Vue組件(35)動(dòng)態(tài)組件 component 的 is 到底可以是啥?

component 動(dòng)態(tài)組件

Vue官網(wǎng)上提供了一個(gè)動(dòng)態(tài)組件 <component :is="currentTabComponent"> ,那么這里的 is 到底是什么呢词裤?
官網(wǎng)介紹的太分散了刺洒,這里盡量全面的列舉出來(lái)。如果有遺漏歡迎補(bǔ)充吼砂。

  • 原生HTML
<component is="input" placeholder="原生HTML" value='123'></component>
<component is="div">這是div</component>

input逆航、select 這些 HTML 自帶的都是可以的,div這些也可以渔肩。

  • 全局組件
<component is="el-input" placeholder="UI庫(kù)的文本框" style="width: 200px;" v-model='value'></component>

最常見(jiàn)的全局組件因俐,就是各種UI庫(kù)了,他們會(huì)用插件的方式被注冊(cè)成為全局組件赖瞒,所以我們可以直接使用el-input這類(lèi)的標(biāo)簽女揭。

  • 局部組件
<component is="test" str="局部注冊(cè)的組件" ></component>

需要先在 組件的 components: { test } 部分注冊(cè)組件,然后就可以用了栏饮。

  • 異步組件
<component 
    :is="defineAsyncComponent(()=>import('./components/test'))"
    str="局部注冊(cè)的組件"
  ></component>

這種方式就不需要在組件的 components 里面注冊(cè)了,可以直接使用磷仰∨坻遥可以實(shí)現(xiàn)真按需加載。

如何動(dòng)態(tài)灶平?

看了上面的例子你可能會(huì)奇怪伺通,直接使用標(biāo)簽不香嗎?干嘛非要用這個(gè)動(dòng)態(tài)組件逢享?
動(dòng)態(tài)組件有幾個(gè)好處:

  • 動(dòng)態(tài)加載罐监、動(dòng)態(tài)改變組件類(lèi)型,比如官網(wǎng)里的例子瞒爬, 改變tab就改變了組件弓柱。

  • 遍歷

<template v-for="key in [101, 102, 103, 104]" :key="key">
  <component :is="dict[key]"></component>
</template>
     const dict = {
        101: 'input',
        102: 'el-input',
        103: 'test',
        104: defineAsyncComponent( () =>
            import('./components/test')
          )
      }

這個(gè)是我最喜歡的一種用法,封裝表單控件(的子控件)就非常方便了侧但。
另外還可以實(shí)現(xiàn)表單的自定義子控件矢空,比如加一個(gè) 105:你自己寫(xiě)的一個(gè)組件,這樣就可以擴(kuò)展子控件了禀横。

屬性怎么辦屁药?

不同類(lèi)型的組件,需要的屬性也是不一樣的柏锄,那么遍歷的時(shí)候如何給組件的屬性賦值酿箭?

這個(gè)可以使用 v-bind="{}" 的方式來(lái)實(shí)現(xiàn),把需要的屬性做成一個(gè)對(duì)象就好趾娃。

事件還沒(méi)想好缭嫡,目前只能是統(tǒng)一事件。
插槽也可以支持茫舶,只是需要做一下判斷械巡。

異步組件 defineAsyncComponent

  • 加載 xx.vue 文件:
defineAsyncComponent( () =>
  import('./components/test.vue')
)

我懷疑 VueRouter 就是用 defineAsyncComponent 來(lái)實(shí)現(xiàn) 異步路由的。

  • 加載 xx.js 文件:
defineAsyncComponent( () =>
  import('./components/test.js  ')
)

js文件的內(nèi)容可以是這樣的。

test.js

export default {
  name: 'component-test',
  template: `
    <div>
      <br>
      這是 組件測(cè)試<br>
      父組件傳遞參數(shù):{{str}}<br>
      setup 獲取參數(shù):{{str1}}<br>
    </div>
  `,
  props: {
    str: String
  },
  setup(props) {
    // 在setup里面獲取參數(shù)值
    let str1 = Vue.ref(props.str)
    str1.value += '--內(nèi)部改一下讥耗。'

    return {
      str1
    }
  }
}

我的在線(xiàn)演示用的都是這種方式有勾,用來(lái)做演示還是很方便的。

  • template
    模板古程,設(shè)置HTML部分蔼卡。

其他的地方和 .vue 文件是一樣的,當(dāng)然css除外挣磨,還沒(méi)想出了怎么解決css 的問(wèn)題雇逞,因?yàn)椴粫?huì)。茁裙。塘砸。

動(dòng)態(tài)組件的演示
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市晤锥,隨后出現(xiàn)的幾起案子掉蔬,更是在濱河造成了極大的恐慌,老刑警劉巖矾瘾,帶你破解...
    沈念sama閱讀 222,252評(píng)論 6 516
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件女轿,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡壕翩,警方通過(guò)查閱死者的電腦和手機(jī)蛉迹,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,886評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)放妈,“玉大人北救,你說(shuō)我怎么就攤上這事〈竺停” “怎么了扭倾?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,814評(píng)論 0 361
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挽绩。 經(jīng)常有香客問(wèn)我膛壹,道長(zhǎng),這世上最難降的妖魔是什么唉堪? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,869評(píng)論 1 299
  • 正文 為了忘掉前任模聋,我火速辦了婚禮,結(jié)果婚禮上唠亚,老公的妹妹穿的比我還像新娘链方。我一直安慰自己,他們只是感情好灶搜,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,888評(píng)論 6 398
  • 文/花漫 我一把揭開(kāi)白布祟蚀。 她就那樣靜靜地躺著工窍,像睡著了一般。 火紅的嫁衣襯著肌膚如雪前酿。 梳的紋絲不亂的頭發(fā)上患雏,一...
    開(kāi)封第一講書(shū)人閱讀 52,475評(píng)論 1 312
  • 那天,我揣著相機(jī)與錄音罢维,去河邊找鬼淹仑。 笑死,一個(gè)胖子當(dāng)著我的面吹牛肺孵,可吹牛的內(nèi)容都是我干的匀借。 我是一名探鬼主播,決...
    沈念sama閱讀 41,010評(píng)論 3 422
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼平窘,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼吓肋!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起初婆,我...
    開(kāi)封第一講書(shū)人閱讀 39,924評(píng)論 0 277
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤蓬坡,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后磅叛,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,469評(píng)論 1 319
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡萨赁,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,552評(píng)論 3 342
  • 正文 我和宋清朗相戀三年弊琴,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片杖爽。...
    茶點(diǎn)故事閱讀 40,680評(píng)論 1 353
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡敲董,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出慰安,到底是詐尸還是另有隱情腋寨,我是刑警寧澤,帶...
    沈念sama閱讀 36,362評(píng)論 5 351
  • 正文 年R本政府宣布化焕,位于F島的核電站萄窜,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏撒桨。R本人自食惡果不足惜查刻,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 42,037評(píng)論 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望凤类。 院中可真熱鬧穗泵,春花似錦、人聲如沸谜疤。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,519評(píng)論 0 25
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至履肃,卻和暖如春仔沿,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背榆浓。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,621評(píng)論 1 274
  • 我被黑心中介騙來(lái)泰國(guó)打工于未, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人陡鹃。 一個(gè)月前我還...
    沈念sama閱讀 49,099評(píng)論 3 378
  • 正文 我出身青樓烘浦,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親萍鲸。 傳聞我的和親對(duì)象是個(gè)殘疾皇子闷叉,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,691評(píng)論 2 361

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