首頁 >web前端 >js教程 >如何利用Vue中slot插槽分發父元件

如何利用Vue中slot插槽分發父元件

php中世界最好的语言
php中世界最好的语言原創
2018-06-01 13:48:221514瀏覽

這次帶給大家如何利用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,例如:

&lt ;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(&#39;tip3&#39;)">确定</button>
  </dialog-tip>
  <dialog-tip message="hello" :dialog-show="dialogShow.tip4">
   <p slot="msg">抱歉,没有此用户,请核实后输入</p>
   <button class="btn" @click="closeDialogTip(&#39;tip4&#39;)">重新输入</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.js內偵聽器使用案例解析

如何使用Vue SSR 元件載入

以上是如何利用Vue中slot插槽分發父元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn