這次帶給大家如何利用Vue中slot插槽分發父元件,利用Vue中slot插槽分發父元件的注意事項有哪些,以下就是實戰案例,一起來看一下。
寫在前面
之前寫過一篇關於vue實作dialog會話方塊元件的文章http://www.jb51.net /article/139218.htm
講到瞭如何實現一個vue對話框組件,其中涉及到了父組件和子組件的通信,這個不用多說,看我之前的文章就能明白,文章最後也說到了,我們可以使用slot插槽來編寫元件,slot用來分發內容到子元件中,從而實現元件的高度重複使用,編寫的元件更加靈活。
還是結合對話框的例子,使用slot來實作對話方塊元件
註冊一個名叫dialog-tip的全域元件
Vue.component('dialog-tip', { template: '#dialog-tip', props:['dialogShow','message'], data:function(){ return { content:'' } }, methods:{ } });
使用templete標籤來定義這個元件
<template id="dialog-tip"> <p class="dialog_tip" v-if="dialogShow"> <p class="dialog_tip--mask"></p> <p class="dialog_tip--content"> <p class="dialog_tip--contenttxt"> <slot name="msg">请输入1-8000之间任意整数</slot> </p> <p class="dialog_tip--contentbtns"> <slot> <button class="btn">确定</button> <button class="btn">重新输入</button> <button class="btn">去注册</button> </slot> </p> </p> </p> </template> <template id="dialog-tip"> <p class="dialog_tip" v-if="dialogShow"> <p class="dialog_tip--mask"></p> <p class="dialog_tip--content"> <p class="dialog_tip--contenttxt"> <slot name="msg">请输入1-8000之间任意整数</slot> </p> <p class="dialog_tip--contentbtns"> <slot> <button class="btn">确定</button> <button class="btn">重新输入</button> <button class="btn">去注册</button> </slot> </p> </p> </p> </template>
元件內容包含兩個部分,一個是提示內容,一個是button按鈕,我們將要修改替換的內容使用slot包含起來,
這樣父元件就可以分發內容到子元件裡面了。
<p class="dialog_tip--contenttxt"> <slot name="msg">请输入1-8000之间任意整数</slot> </p> <p class="dialog_tip--contentbtns"> <slot> <button class="btn">确定</button> <button class="btn">重新输入</button> <button class="btn">去注册</button> </slot> </p>
除了預設插槽,還可以定義具名插槽,如果元件中有好幾個部分內容需要替換,我們可以為它定義一個name,例如:
< ;slot name="msg">請輸入1-8000之間任意整數</slot>
這樣在使用元件的時候,指定slot的name ,就會將這部分內容替換掉,而不會替換其他的插槽內容
<p slot="msg">請輸入正確手機號碼</p>
使用定義好的dialog元件
<dialog-tip message="hello" :dialog-show="dialogShow.tip3"> <p slot="msg">请输入正确手机号</p> <button class="btn" @click="closeDialogTip('tip3')">确定</button> </dialog-tip> <dialog-tip message="hello" :dialog-show="dialogShow.tip4"> <p slot="msg">抱歉,没有此用户,请核实后输入</p> <button class="btn" @click="closeDialogTip('tip4')">重新输入</button> <button class="btn" @click="reg">去注册</button> </dialog-tip>
如果不指定slot的名稱,預設dialog-tip標籤裡面的內容會取代子元件中使用slot包含的內容部分,例如以上
使用slot指定了它的名稱來取代子元件中的對應的slot部分,而沒有使用slot指定名稱的內容會預設將子元件中
沒有定義具名插槽的部分內容替換掉。
要注意的是,如果dialog-tip標籤裡沒有定義需要分發的內容,那麼子元件中會顯示預設的插槽內容
關於更多的slot用法,請移步驟https://cn.vuejs.org/v2/guide/components-slots.html
最後
##效果圖相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章! 推薦閱讀:
以上是如何利用Vue中slot插槽分發父元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!