vue組件傳值詳解

全局組件VS局部組件

  1. 全局組件

全局可調(diào)用,可在一個或多個掛在了Vue實(shí)例的DOM節(jié)點(diǎn)內(nèi)使用該組件其馏。

<body>
    <div id="app1">
        <my-component></my-component>
    </div>
    <div id="app2">
        <my-component></my-component>
    </div>
    <!-- js -->
    <script>
        Vue.component("my-component",{
            template:`<div>我是全局組件</div>`
        })
        new Vue({
            el:'#app1',
        })
        new Vue({
            el:'#app2'
        })
    </script>
</body>
  1. 局部組件

在Vue實(shí)例內(nèi)聲明的組件凤跑,只能在該實(shí)例內(nèi)調(diào)用,局部組件和全局組件同時存在(組件名相同)時尝偎,局部組件會覆蓋全局組件饶火。

<body>
    <div id="app">
        <my-component></my-component>
    </div>
    <!-- js -->
    <script>
        new Vue({
            el:'#app',
            components:{
                'my-component':{
                    template:`<div>我是局部組件</div>`,
                }
            }
        })
    </script>
</body>

組件間通信方案

  1. 通過props傳遞

  2. $emit觸發(fā)自定義事件

  3. 使用 ref

  4. 總線,EventBus

  5. parent/root

  6. attrslisteners

  7. ProvideInject

  8. Vuex

父->子

父組件通過屬性賦值的方式向子組件傳值致扯,子組件通過props接收,使用肤寝。

<body>
    <div id="app">
        <my-component :title="title"></my-component>
    </div>
    <!-- js -->
    <script>
        Vue.component("my-component",{
            template:`<div @click='cont++'>{{cont}}</div>`,
            data(){ //子組件的data必須是函數(shù)
                return{
                    cont:this.title, //將接收的值暫存
                }
            },
            props:{
                title:{
                    type: Number, //傳過來的值必須是Number類型
                    default:0,
                    required:true //傳值不能為空
                }
            }
        })
        new Vue({
            el:'#app', 
            data(){
                return{
                    title:0 //父組件綁定傳值
                }
            }, 
        })
    </script>
</body>

子->父

子組件通過向外觸發(fā)方法的方式向父組件傳值。

<body>
    <div id="app">
        {{total}}
        <my-component @addtotal="add"></my-component>
        <my-component v-on:addtotal="add"></my-component>
    </div>
    <!-- js -->
    <script>
        Vue.component("my-component",{
            template:`<div @click='addCont'>{{cont}}</div>`,
            data(){
                return{
                    cont:0 
                }
            },
            methods:{
                addCont(){
                    this.cont++;
                    this.$emit("addtotal");//子組件通過$emit向上觸發(fā)方法
                }
            },
        })
        new Vue({
            el:'#app', 
            data(){
                return{
                    total:0, 
                }
            }, 
            methods:{
                add(){
                    this.total++;
                }
            }
        })
    </script>
</body>

ref

父組件獲取子組件實(shí)例抖僵,調(diào)用子組件方法鲤看、獲取子組件數(shù)據(jù)

// 子組件
<Children ref='son'></Children>

this.$refs.son  // 子組件實(shí)例,可繼續(xù) . 拿到對應(yīng)數(shù)據(jù)

EventBus

適用于:兄弟組件耍群、無關(guān)系組件

// 創(chuàng)建總線(vue 已經(jīng)實(shí)現(xiàn)了Bus)
class Bus {
    constructor(){
        this.callbacks = {};    // 存放事件的名字
    }
    $on(name,fn){
        this.callbacks[name] = this.callbacks[name] || [];
        this.callbacks[name].push(fn);
    }
    $emit(name,args){
        if(this.callbacks[name]){
            this.callbacks[name].forEach(cb => cb(args));
        }
    }
}

// main.js (掛在在vue實(shí)例的原形上)
Vue.prototype.$bus = new Bus();

// 未完……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末义桂,一起剝皮案震驚了整個濱河市找筝,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌慷吊,老刑警劉巖袖裕,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異溉瓶,居然都是意外死亡急鳄,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門堰酿,熙熙樓的掌柜王于貴愁眉苦臉地迎上來疾宏,“玉大人,你說我怎么就攤上這事触创】裁辏” “怎么了?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵哼绑,是天一觀的道長岩馍。 經(jīng)常有香客問我,道長抖韩,這世上最難降的妖魔是什么兼雄? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮帽蝶,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘块攒。我一直安慰自己励稳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布囱井。 她就那樣靜靜地躺著驹尼,像睡著了一般。 火紅的嫁衣襯著肌膚如雪庞呕。 梳的紋絲不亂的頭發(fā)上新翎,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天,我揣著相機(jī)與錄音住练,去河邊找鬼地啰。 笑死,一個胖子當(dāng)著我的面吹牛讲逛,可吹牛的內(nèi)容都是我干的亏吝。 我是一名探鬼主播,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼盏混,長吁一口氣:“原來是場噩夢啊……” “哼蔚鸥!你這毒婦竟也來了惜论?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤止喷,失蹤者是張志新(化名)和其女友劉穎馆类,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體弹谁,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡乾巧,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了僵闯。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片卧抗。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖鳖粟,靈堂內(nèi)的尸體忽然破棺而出社裆,到底是詐尸還是另有隱情,我是刑警寧澤向图,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布泳秀,位于F島的核電站,受9級特大地震影響榄攀,放射性物質(zhì)發(fā)生泄漏嗜傅。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一檩赢、第九天 我趴在偏房一處隱蔽的房頂上張望吕嘀。 院中可真熱鬧,春花似錦贞瞒、人聲如沸偶房。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽棕洋。三九已至,卻和暖如春乒融,著一層夾襖步出監(jiān)牢的瞬間掰盘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工赞季, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留愧捕,地道東北人。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓碟摆,卻偏偏與公主長得像晃财,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354