中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

vue中怎么使用slot分發內容

發布時間:2021-07-09 15:02:38 來源:億速云 閱讀:148 作者:Leah 欄目:web開發

這篇文章將為大家詳細講解有關vue中怎么使用slot分發內容,文章內容質量較高,因此小編分享給大家做個參考,希望大家閱讀完這篇文章后對相關知識有一定的了解。

一、什么是slot

在使用組件時,我們常常要像這樣組合它們:

<app>
 <app-header></app-header>
 <app-footer></app-footer>
</app>

當需要讓組件組合使用,混合父組件的內容與子組件的模板時,就會用到slot , 這個過程叫作內容分發( transclusion )。

注意兩點:

1.< app>組件不知道它的掛載點會有什么內容。掛載點的內容是由<app >的父組件決定的。

2.<app> 組件很可能有它自己的模板。

props 傳遞數據、events 觸發事件和slot 內容分發就構成了Vue 組件的3 個API 來源,再復雜的組件也是由這3 部分構成的。

 二、作用域

<child-component>
 {{ message }}
</child-component>

這里的message 就是一個slot ,但是它綁定的是父組件的數據,而不是組件<child-component>的數據。

父組件模板的內容是在父組件作用域內編譯,子組件模板的內容是在子組件作用域內編譯。如:

   <div id="app15">
      <child-component v-show="showChild"></child-component>
    </div>
Vue.component('child-component',{
  template: '<div>子組件</div>'
});
var app15 = new Vue({
  el: '#app15',
  data: {
    showChild: true
  }
});

這里的狀態showChild 綁定的是父組件的數據,如果想在子組件上綁定,那應該是:

<div id="app15">
      <child-component></child-component>
    </div>
Vue.component('child-component',{
  template: '<div v-show="showChild">子組件</div>',
  data: function(){
    return {
      showChild: true
    }
  }
});

因此, slot 分發的內容,作用域是在父組件上的。

三、slot用法

3.1 單個slot

在子組件內使用特殊的<slot>元素就可以為這個子組件開啟一個slot(插槽),在父組件模板里,插入在子組件標簽內的所有內容將替代子組件的<slot> 標簽及它的內容。   

 <div id="app16">
      <my-component16>
        <p>分發的內容</p>
        <p>更多分發的內容</p>
      </my-component16>
    </div>
Vue.component('my-component16',{
  template: '<div>' +
        '<slot><p>如果父組件沒有插入內容,我將作為默認出現<</p></slot>' +    //預留的slot插槽
       '</div>'
});
var app16 = new Vue({
  el: '#app16'
});

渲染結果為:

<div id=”app16”>
  <div>
    <p>分發的內容<p>
    <p>更多分發的內容<p>
  </div>
</div>

 子組件child-component 的模板內定義了一個<slot>元素,并且用一個<p>作為默認的內容,在父組件沒有使用slot 時,會渲染這段默認的文本;如果寫入了slot, 那就會替換整個<slot> 。

3.2具名slot

給<slot> 元素指定一個name 后可以分發多個內容,具名Slot 可以與單個slot 共存。

  <div id="app17">
      <my-component17>
        <h4 slot="header">標題</h4>
        <p>正文內容</p>
        <p>更多正文內容</p>
        <h4 slot="footer">底部信息</h4>
      </my-component17>
    </div>
Vue.component('my-component17',{
  template: '<div class="container">' +
         '<div class="header">' +
          '<slot name="header"></slot>' +
         '</div>' +
         '<div class="main">' +
          '<slot></slot>' +
         '</div>'+
         '<div class="footer">' +
          '<slot name="footer"></slot>' +
         '</div>'+
       '</div>'
});
var app17 = new Vue({
  el: '#app17'
});

渲染結果為:         

 <div id="app17">
        <div class="container">
          <div class="header">
            <h4>標題</h4></div>
          <div class="main"> 
            <p>正文內容</p> 
            <p>更多正文內容</p> 
          </div>
          <div class="footer">
            <h4>底部信息</h4>
          </div>
        </div>
      </div>

 子組件內聲明了3 個<s lot>元素,其中在<div class=” main >內的<slot> 沒有使用name 特性,它將作為默認slot 出現,父組件沒有使用slot 特性的元素與內容都將出現在這里。

如果沒有指定默認的匿名slot ,父組件內多余的內容片段都將被拋棄。

四、作用域插槽

作用域插槽是一種特殊的slot ,使用一個可以復用的模板替換己渲染元素。

看一個例子:     

 <div id="app18">
      <my-component18>
        <template scope="props">
          <p>來自父組件的內容</p>
          <p>{{props.msg}}</p>
        </template>
      </my-component18>
    </div>
Vue.component('my-component18',{
  template: '<div class="container"><slot msg="來自子組件的內容"></slot></div>'
});
var app18 = new Vue({
  el: '#app18'
});

觀察子組件的模板,在<slot>元素上有一個類似props 傳遞數據給組件的寫法msg=” xxx ”,將數據傳到了插槽。

父組件中使用了<template>元素,而且擁有一個scope=”props ”的特性,這里的props只是一個臨時變量,就像v-for= ” item in items 里面的item 一樣,template 內可以通過臨時變量props訪問來自子組件插槽的數據msg 。

下面看下Vue組件中slot的用法

主要是讓組件的可擴展性更強。

1. 使用匿名slot

vue中怎么使用slot分發內容

2. 給slot加個名字

vue中怎么使用slot分發內容

關于vue中怎么使用slot分發內容就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

禄丰县| 宁海县| 麻城市| 彰化县| 龙里县| 西平县| 鄄城县| 北宁市| 筠连县| 额济纳旗| 子长县| 夏津县| 麻栗坡县| 阜新市| 桦南县| 沾化县| 三亚市| 托克托县| 攀枝花市| 全南县| 虎林市| 双城市| 教育| 开原市| 五寨县| 花莲县| 永善县| 白银市| 田阳县| 宿州市| 秦皇岛市| 巴楚县| 响水县| 故城县| 卫辉市| 杨浦区| 江安县| 绥棱县| 蒙城县| 彭山县| 湟中县|