VUE DAY3 組件

組件(Component)

組件是VUE最強大的功能之一罕伯。組件可以擴展HTML元素乾吻,封裝可重用的代碼。在較高層面上织阅,組件是自定義元素壳繁,Vue.js的編譯器為它添加特殊功能。

組件化開發(fā)就是把一個完整的頁面分割成一個一個的小組件荔棉。

組件化開發(fā)可以使代碼更容易維護闹炉,得到更好的復(fù)用效果。

Vue組件分為全局組件局部組件
全局組件:在所有的vue實例中都可以使用
局部組件:只有在當前的vue實例中可以使用

全局組件

Vue.component(tagName, options)

//注冊一個全局組件
Vue.component("hello", {
  //注意模板中只能有一個根元素
  //template:'<h1></h1><h1></h1>'; 這是不可以的
  template:'<h1>hello component</h1>';
})

全局組件可以在所有實例中使用

<div id="app">
  <hello></hello>
</div>

局部組件

局部組件卸載vue實例的內(nèi)部润樱,通過components屬性來定義局部組件

components:{
  "hello":{
    template:`<h1>hello</h1>`
  }
}

組件是特殊的vue實例

可以把組件看成一個vue的實例渣触,因此,在vue實例中能配置的屬性(data, method, watch等)在組件中依舊能夠配置壹若。
組件中的data屬性必須是一個函數(shù)嗅钻,返回值才是data的數(shù)據(jù)

Vue.component("my-cp",{
  template:`
    <div>
      <button @click="fn">{{msg}}</button>
    </div>
  `,
  data(){
    return {
      msg: 'click me'
    }
  },
  methods:{
    fn(){console.log('------->fn')}
  }
})

組件是一個獨立封閉的個體皂冰,組件之間的數(shù)據(jù)相互獨立,不能互相使用

組件間通訊

如上所述养篓,組件是一個單獨的個體秃流,各自的數(shù)據(jù)無法互相使用,但在工作中柳弄,多個組件之間的數(shù)據(jù)是需要互通的舶胀。
組件之間的通訊按照結(jié)構(gòu)分為:
1.父傳子
2.子傳父
3.非父子

組件通訊-父傳子

1.定義father
Vue.component("father", {
  template:`
  <div class="father">
    <son></son>
  </div>
  `,
  data():{
    return {
      name: 'clark',
      power:'super'
    }
  }
})
2.定義son
Vue.component("son", {
  template:`
  <div class="son">superman</div>
  `
})
3.通訊

父組件模板中:

template:`
<div>
  //培養(yǎng)超能力
  //:power是注冊的屬性
  //"power"是父組件中的數(shù)據(jù)
  //把數(shù)據(jù)在這里傳給子組件
  <son :power="power"></son>
</div>
`

子組件模板中:

template: `
  <div>
    <p>從father繼承了{{power}}</p>
  </div>
`,
//子組件使用props屬性接受父組件傳來的數(shù)據(jù),然后在template中使用
props:['power']

組件通訊-子傳父

思路方面语御,邏輯是在父類的方法中實現(xiàn),只是實現(xiàn)邏輯的參數(shù)是由子組件傳遞過來的席怪。

let vm = new Vue({
  el:"#dog",
  methods:{
    //父組件中定義了處理事件的方法应闯,id是子組件傳來的參數(shù)
    delinlist(id){
      ...
    }
  }
})

接下來考慮的是子組件如何傳遞參數(shù)了

Vue.component('btable', {
  template:`
    ...
    //在子組件的模板中綁定click事件,指向組件自己的del(id)方法
    <a @click="del(item.id)"></a>
    ...
  `,
  method:{
    del(id){
      //使用$emit發(fā)出當前實例的事件
      this.$emit('del-event', id)
    }
  }
})

在使用中如下

 //這里注意挂捻,@del-event綁定的是子組件發(fā)出的事件碉纺,"delinlist"是父組件中處理數(shù)據(jù)的方法
<btable @del-event="delinlist"></btable>

組件通訊-非父子

思路:使用一個空的實例md,接受數(shù)據(jù)的A模板設(shè)置方法到md上刻撒,再由發(fā)送數(shù)據(jù)的B模板去觸發(fā)
空模板:

const md = new Vue()

A模板(在md上掛載getmsg方法)

Vue.component('batman', {
                template: `<div>蝙蝠俠收到消息:{{msg}}</div>`,
                created() {
                    md.$on('getmsg', msg => {
                        this.msg = msg
                    })
                },
                data() {
                    return {
                        msg: this.msg
                    }
                }
            })

B模板(點擊按鈕后觸發(fā)md上已經(jīng)掛載的getmsg方法)

Vue.component('flash', {
                template: `<button @click="run">閃電俠說話</button>`,
                data() {
                    return {
                        msg: 'find us'
                    }
                },
                methods: {
                    run() {
                        md.$emit('getmsg', this.msg)
                    }
                }
            })

Vue

var vm = new Vue({
                el: "#dog",
            })

使用

<div id="dog">
  <batman></batman>
  <flash></flash>
</div>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末骨田,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子声怔,更是在濱河造成了極大的恐慌态贤,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件醋火,死亡現(xiàn)場離奇詭異悠汽,居然都是意外死亡,警方通過查閱死者的電腦和手機芥驳,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進店門柿冲,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人兆旬,你說我怎么就攤上這事假抄。” “怎么了丽猬?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵宿饱,是天一觀的道長。 經(jīng)常有香客問我脚祟,道長刑棵,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任愚铡,我火速辦了婚禮蛉签,結(jié)果婚禮上胡陪,老公的妹妹穿的比我還像新娘。我一直安慰自己碍舍,他們只是感情好柠座,可當我...
    茶點故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著片橡,像睡著了一般妈经。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上捧书,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天吹泡,我揣著相機與錄音,去河邊找鬼经瓷。 笑死爆哑,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的舆吮。 我是一名探鬼主播揭朝,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼色冀!你這毒婦竟也來了潭袱?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤锋恬,失蹤者是張志新(化名)和其女友劉穎屯换,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體与学,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡趟径,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了癣防。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜗巧。...
    茶點故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖蕾盯,靈堂內(nèi)的尸體忽然破棺而出幕屹,到底是詐尸還是另有隱情,我是刑警寧澤级遭,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布望拖,位于F島的核電站,受9級特大地震影響挫鸽,放射性物質(zhì)發(fā)生泄漏说敏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一丢郊、第九天 我趴在偏房一處隱蔽的房頂上張望盔沫。 院中可真熱鬧医咨,春花似錦、人聲如沸架诞。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽谴忧。三九已至很泊,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間沾谓,已是汗流浹背委造。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留均驶,地道東北人昏兆。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像辣恋,于是被迫代替她去往敵國和親亮垫。 傳聞我的和親對象是個殘疾皇子模软,可洞房花燭夜當晚...
    茶點故事閱讀 43,543評論 2 349