手把手教你玩轉(zhuǎn)Vue.js組件(三)

上一節(jié)談到有關(guān)Vue.js組件中“傳參”的概念揍魂,我們使用的是Prop物独,也就是在標(biāo)簽上自定義屬性來向子組件傳遞數(shù)據(jù)重荠。這一節(jié)我們繼續(xù)談?wù)劇皞鲄ⅰ保徊贿^這次不是通過自定義屬性挤安,而是通過一個固定的自定義標(biāo)簽<slot>谚殊,它有個比較特別的名字:插槽

同樣還是前面的例子蛤铜,只不過有一點(diǎn)點(diǎn)小改動:

<!--HTML-->
<pop-tips ref="tips" src="./imgs/success.png"></pop-tips>
//pop-tips組件
Vue.component('pop-tips',{
    props: {
        duration: {
            type: Number,
            default: 2,
            validator: function (value) {
                return value <= 3;
            }
        },
        src: ''
    },
    data: function(){
        return {
            popShow: false,
            popText: ''
        }
    },
    template: '<div class="pop-tips" :class="{show: popShow}"><span><img v-if="src" :src="src" alt=""/>{{popText}}</span></div>',
    methods: {
        popTips: function(text){
            var _this = this;
            this.popShow = true;
            this.popText = text;
            setTimeout(function () {
                _this.popShow = false;
            },this.duration*1000);
        }
    }
});
// 實(shí)例調(diào)用組件方法
var vm = new Vue({
    el: '#app',
    methods: {
        showTips: function(){
            popTips('支付成功');
        }
    }
});
function popTips(text){
    vm.$refs.tips.popTips(text);
}

我在提示文字前添加了一張圖片嫩絮,這張圖片路徑通過Prop傳遞給子組件,效果如下圖:


這效果就是典型的微信彈出提示围肥。當(dāng)然剿干,若不傳src屬性,效果就只是純文字提示:

<!--HTML-->
<pop-tips ref="tips"></pop-tips>

這就是組件靈活性的好處穆刻。那么置尔,插槽到底是個什么東西呢?我們該如何使用它呢氢伟?

別著急榜轿,前面只是鋪墊篮愉,接下來請聽我娓娓道來~

同樣是以上效果,我們也可以使用插槽來實(shí)現(xiàn)它:

<!--HTML-->
<pop-tips ref="tips">
    <!--替代組件中的slot元素-->
    <img src="./imgs/success.png" alt=""/>
</pop-tips>
//pop-tips組件
Vue.component('pop-tips',{
    //……
    template: '<div class="pop-tips" :class="{show: popShow}"><span><slot></slot>{{popText}}</span></div>',
    //……
});

最終頁面上的渲染出來的HTML內(nèi)容如下:

<div class="pop-tips"><span><img src="./imgs/success.png" alt="">支付成功</span></div>

也就是說組件模板中的<slot>標(biāo)簽是用于指定從父組件傳入內(nèi)容的替換位置差导,示例中就是將<slot>標(biāo)簽替換成<img>標(biāo)簽。當(dāng)然猪勇,使用插槽有一個好處就是我們可以更加靈活地自定義組件设褐,我們可以傳入其他標(biāo)簽,也可以不傳任何內(nèi)容泣刹。

同樣的助析,我們也可以給插槽設(shè)置默認(rèn)值:

//pop-tips組件
Vue.component('pop-tips',{
    //……
    template: '<div class="pop-tips" :class="{show: popShow}"><span><slot><img src="./imgs/success.png" alt=""/></slot>{{popText}}</span></div>',
    //……
});

也就是將默認(rèn)值放在<slot>標(biāo)簽中,但是這樣做的話椅您,無論你有沒有傳圖片外冀,最終渲染結(jié)果都會帶有這張默認(rèn)圖片的。

說了這么多掀泳,在實(shí)際運(yùn)用當(dāng)中雪隧,什么時候我們應(yīng)該使用Prop來“傳參”,而什么時候我們又應(yīng)該用<slot>元素呢员舵?

以下是我個人簡單的總結(jié):

Prop:用于傳遞簡單數(shù)據(jù)脑沿,適合需要自定義內(nèi)容比較少的情況
<slot>: 用于傳遞標(biāo)簽內(nèi)容,適合需要自定義內(nèi)容比較復(fù)雜的情況马僻,相對Prop來說更加靈活

所以說庄拇,以上所舉的例子如果僅僅是為了能夠自定義圖片的話,完全可以只使用Prop來實(shí)現(xiàn)韭邓。

本文重點(diǎn)總結(jié):

① 父組件向子組件傳遞數(shù)據(jù)最常用方法是Prop<slot>
Prop傳遞的數(shù)據(jù)是標(biāo)簽屬性值措近,組件內(nèi)props屬性接收數(shù)據(jù);<slot>傳遞的數(shù)據(jù)是子標(biāo)簽元素女淑,組件內(nèi)<slot>元素接收數(shù)據(jù)并且被替換

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末瞭郑,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子鸭你,更是在濱河造成了極大的恐慌凰浮,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,817評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件苇本,死亡現(xiàn)場離奇詭異袜茧,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)瓣窄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,329評論 3 385
  • 文/潘曉璐 我一進(jìn)店門笛厦,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人俺夕,你說我怎么就攤上這事裳凸〖桑” “怎么了?”我有些...
    開封第一講書人閱讀 157,354評論 0 348
  • 文/不壞的土叔 我叫張陵姨谷,是天一觀的道長逗宁。 經(jīng)常有香客問我,道長梦湘,這世上最難降的妖魔是什么瞎颗? 我笑而不...
    開封第一講書人閱讀 56,498評論 1 284
  • 正文 為了忘掉前任,我火速辦了婚禮捌议,結(jié)果婚禮上哼拔,老公的妹妹穿的比我還像新娘。我一直安慰自己瓣颅,他們只是感情好倦逐,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,600評論 6 386
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著宫补,像睡著了一般檬姥。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上粉怕,一...
    開封第一講書人閱讀 49,829評論 1 290
  • 那天穿铆,我揣著相機(jī)與錄音,去河邊找鬼斋荞。 笑死荞雏,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的平酿。 我是一名探鬼主播凤优,決...
    沈念sama閱讀 38,979評論 3 408
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼蜈彼!你這毒婦竟也來了筑辨?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 37,722評論 0 266
  • 序言:老撾萬榮一對情侶失蹤幸逆,失蹤者是張志新(化名)和其女友劉穎棍辕,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體还绘,經(jīng)...
    沈念sama閱讀 44,189評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡楚昭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,519評論 2 327
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了拍顷。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片抚太。...
    茶點(diǎn)故事閱讀 38,654評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出尿贫,到底是詐尸還是另有隱情电媳,我是刑警寧澤,帶...
    沈念sama閱讀 34,329評論 4 330
  • 正文 年R本政府宣布庆亡,位于F島的核電站匾乓,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏又谋。R本人自食惡果不足惜拼缝,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,940評論 3 313
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望搂根。 院中可真熱鬧,春花似錦铃辖、人聲如沸剩愧。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,762評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽仁卷。三九已至,卻和暖如春犬第,著一層夾襖步出監(jiān)牢的瞬間锦积,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,993評論 1 266
  • 我被黑心中介騙來泰國打工歉嗓, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留丰介,地道東北人。 一個月前我還...
    沈念sama閱讀 46,382評論 2 360
  • 正文 我出身青樓鉴分,卻偏偏與公主長得像哮幢,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子志珍,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,543評論 2 349

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

  • 什么是組件 組件(Component)是 Vue.js 最強(qiáng)大的功能之一橙垢。組件可以擴(kuò)展 HTML 元素,封裝可重用...
    angelwgh閱讀 780評論 0 0
  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容伦糯,還有我對于 Vue 1.0 印象不深的內(nèi)容柜某。關(guān)于...
    云之外閱讀 5,046評論 0 29
  • 此文基于官方文檔,里面部分例子有改動敛纲,加上了一些自己的理解 什么是組件喂击? 組件(Component)是 Vue.j...
    陸志均閱讀 3,806評論 5 14
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn)淤翔,斷路器惭等,智...
    卡卡羅2017閱讀 134,633評論 18 139
  • 作為九零后的尾巴,我最早看到的就是03版的《倚天屠龍記》办铡,雖蘇有朋飾演的張無忌略顯青澀辞做,敏敏那時還有著圓圓的包子臉...
    邑小億閱讀 672評論 3 1