Vue組件

Vue組件玲躯,擴(kuò)展html荚虚,封裝可重用的代碼
組件命名方式有兩種
(1)短橫線分隔命名添怔,如 'b-box'
(2)PascalCase首字母大寫(xiě)命名即大駝峰,但是當(dāng)使用 PascalCase 定義組件時(shí)续徽,在html文檔里引用時(shí)必須使用kebab-case短橫線分隔命名才生效畏妖,否則報(bào)錯(cuò)傅瞻,如'TableBox'要寫(xiě)成'table-box'
原因:因?yàn)镠TML對(duì)大小寫(xiě)不敏感踢代,JS對(duì)大小寫(xiě)敏感
組件里的data屬性必須是一個(gè)函數(shù)
1.局部組件
在Vue實(shí)例中,創(chuàng)建一個(gè)components對(duì)象嗅骄,里面定義組件名稱胳挎,一些數(shù)據(jù)方法等,先定義一個(gè)組件名稱溺森,template里寫(xiě)的是可重用的HTML模板慕爬,props里定義的是一些靜態(tài)屬性

components: {
                'b-box': {
                    template: `<div class="box">
                        <h2 class="title">{{title}}</h2>
                        <p class="content">{{content}}</p>
                               </div>`,
                    props: ['title', 'content']
                }
            }

當(dāng)要使用這個(gè)模板時(shí),標(biāo)簽就是要使用的組件名屏积,在Vue實(shí)例中澡罚,掛載對(duì)象,定義相關(guān)的數(shù)據(jù)肾请,然后組件就可綁定這些數(shù)據(jù)留搔,渲染頁(yè)面

<div id="app">
        <b-box v-for="(item,index) in list" :key="index" 
        :title="item.title" :content="item.content"></b-box>
    </div>

注意:局部組件只能在當(dāng)前Vue實(shí)例作用域下有效
2.全局組件
全局組件必須寫(xiě)在Vue實(shí)例創(chuàng)建之前,才在該根元素下面生效铛铁;

  Vue.component:(
                'b-count', {
                    template: `<div class="content" >
               <span>{{types}}</span>
               <div>
                <button @click="MyCount--" :disabled="MyCount===1">-</button>
                <input type="text" :value="MyCount">
                <button @click="MyCount++" :disabled="MyCount===10">+</button>
               </div>
              </div>`,
})

組件間的數(shù)據(jù)傳遞
子組件通過(guò)$emit可以觸發(fā)事件隔显,第一個(gè)參數(shù)為要觸發(fā)的事件却妨,第二個(gè)事件為要傳遞的數(shù)據(jù)
在組件中來(lái)監(jiān)聽(tīng)MyCount值的變化

watch: {
                        MyCount(val) {
                            console.log(val);
                            this.$emit('synccount', val)
                        }
                    }

在Vue實(shí)例中接收MyCount值的變化

methods: {
                synccount(index, e) {                    
                    this.list[index].count = e
                }
            }

在模板中點(diǎn)擊觸發(fā)事件

<b-count v-for="(item,index) in list" :key="index" :types="item.types" :count="item.count"
            @synccount="synccount(index,$event)">
        </b-count>

3.父子組件
$parent是獲取父組件對(duì)象

$root是獲取根組件對(duì)象

$children是獲取子組件對(duì)象

$ref返回的是一個(gè)對(duì)象,對(duì)象中包含所有帶有ref屬性的組件
父組件

ue.component('b-tabs', {
            template:`
                <div class="tabs">
                    <ul class="title">
                        <li @click="activeIndex=index" :class="{active:activeIndex===index}" v-for="(item,index) in titles" :key="index">{{item}}</li>
                    </ul>
                    <ul class="content">
                        <slot></slot>
                    </ul>
                </div>
            `,
            data() {
                return {
                    //高亮索引
                    activeIndex:0,
                    //定義titles數(shù)組
                    titles:[]
                }
            },
            watch:{
                //監(jiān)聽(tīng)高亮索引
                activeIndex(val){
                    //先隱藏所有的子組件
                    this.$children.forEach(c=>c.isShow=false)
                    //再顯示當(dāng)前高度的子組件
                    this.$children[val].isShow = true
                }
            },
            // 父組件掛載完成時(shí)括眠,所有的子組件一定全部都掛載完成了
            mounted() {
                this.$children[this.activeIndex].isShow = true
            },
        })

子組件

      Vue.component('b-tabs-item', {
            props:['title'],
            template:`
                <li v-show="isShow">
                    <slot></slot>
                </li>
            `,
            data() {
                return {
                    //是否顯示
                    isShow:false
                }
            },
            created() {
                // 在子組件的created生命周期函數(shù)中彪标,可以獲取到父組件的數(shù)據(jù)
                this.$parent.titles.push(this.title)
            },
        })

模板運(yùn)用

<div id="app">
        <b-tabs>
            <b-tabs-item title="南京">
                   <li>南京的鹽水鴨真好吃</li>
            </b-tabs-item>
            <b-tabs-item title="北京">
                <ul>
                    <li>北京的烤鴨真好吃</li>
                </ul>
            </b-tabs-item>
            <b-tabs-item title="無(wú)錫">
                <a href="#">無(wú)錫的小籠包真好吃</a>
            </b-tabs-item>
        </b-tabs>
    </div>

運(yùn)行截圖


運(yùn)行效果

插槽問(wèn)題
用<slot></slot>來(lái)表示,相當(dāng)于一個(gè)占位符掷豺,父組件可以在這個(gè)占位符中填充任何模板代碼捞烟,如 HTML、組件等当船,填充內(nèi)容會(huì)替換子組件的<slot></slot>標(biāo)簽题画。如果子組件沒(méi)有使用插槽,父組件如果需要往子組件中填充模板或者h(yuǎn)tml, 是沒(méi)法做到的德频。
4.第三方組件庫(kù)
如element-ui,vant,iview等苍息,在需要使用的頁(yè)面中引入其樣式及文件,就可以使用了壹置,簡(jiǎn)單又高效

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末竞思,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子钞护,更是在濱河造成了極大的恐慌盖喷,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,755評(píng)論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件难咕,死亡現(xiàn)場(chǎng)離奇詭異传蹈,居然都是意外死亡,警方通過(guò)查閱死者的電腦和手機(jī)步藕,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)挑格,“玉大人咙冗,你說(shuō)我怎么就攤上這事∑” “怎么了雾消?”我有些...
    開(kāi)封第一講書(shū)人閱讀 165,138評(píng)論 0 355
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)挫望。 經(jīng)常有香客問(wèn)我立润,道長(zhǎng),這世上最難降的妖魔是什么媳板? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,791評(píng)論 1 295
  • 正文 為了忘掉前任桑腮,我火速辦了婚禮,結(jié)果婚禮上蛉幸,老公的妹妹穿的比我還像新娘破讨。我一直安慰自己丛晦,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,794評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布提陶。 她就那樣靜靜地躺著烫沙,像睡著了一般。 火紅的嫁衣襯著肌膚如雪隙笆。 梳的紋絲不亂的頭發(fā)上锌蓄,一...
    開(kāi)封第一講書(shū)人閱讀 51,631評(píng)論 1 305
  • 那天,我揣著相機(jī)與錄音撑柔,去河邊找鬼瘸爽。 笑死,一個(gè)胖子當(dāng)著我的面吹牛乏冀,可吹牛的內(nèi)容都是我干的蝶糯。 我是一名探鬼主播,決...
    沈念sama閱讀 40,362評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼辆沦,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼昼捍!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起肢扯,我...
    開(kāi)封第一講書(shū)人閱讀 39,264評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤妒茬,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后蔚晨,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體乍钻,經(jīng)...
    沈念sama閱讀 45,724評(píng)論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,900評(píng)論 3 336
  • 正文 我和宋清朗相戀三年铭腕,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了银择。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,040評(píng)論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡累舷,死狀恐怖浩考,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情被盈,我是刑警寧澤析孽,帶...
    沈念sama閱讀 35,742評(píng)論 5 346
  • 正文 年R本政府宣布,位于F島的核電站只怎,受9級(jí)特大地震影響袜瞬,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜身堡,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,364評(píng)論 3 330
  • 文/蒙蒙 一邓尤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦裁赠、人聲如沸殿漠。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,944評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)绞幌。三九已至,卻和暖如春一忱,著一層夾襖步出監(jiān)牢的瞬間莲蜘,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,060評(píng)論 1 270
  • 我被黑心中介騙來(lái)泰國(guó)打工帘营, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留票渠,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 48,247評(píng)論 3 371
  • 正文 我出身青樓芬迄,卻偏偏與公主長(zhǎng)得像问顷,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子禀梳,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,979評(píng)論 2 355

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