首頁 web前端 js教程 vue+slot分送內容

vue+slot分送內容

Jun 09, 2018 am 11:42 AM
slot vue vue組件 散佈

這次帶給大家vue slot分發內容,vue slot分發內容的注意事項有哪些,以下就是實戰案例,一起來看一下。

一、什麼是slot

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

<app>
 <app-header></app-header>
 <app-footer></app-footer>
</app>
登入後複製

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

注意兩點:

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

2. 元件很可能有它自己的範本。

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

 二、作用域

<child-component>
 {{ message }}
</child-component>
登入後複製

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

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

   <p id="app15">
      <child-component v-show="showChild"></child-component>
    </p>
Vue.component('child-component',{
  template: '<p>子组件</p>'
});
var app15 = new Vue({
  el: '#app15',
  data: {
    showChild: true
  }
});
登入後複製

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

    <p id="app15">
      <child-component></child-component>
    </p>
Vue.component('child-component',{
  template: '<p v-show="showChild">子组件</p>',
  data: function(){
    return {
      showChild: true
    }
  }
});
登入後複製

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

三、slot用法

#3.1 單一slot

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

 <p id="app16">
      <my-component16>
        <p>分发的内容</p>
        <p>更多分发的内容</p>
      </my-component16>
    </p>
Vue.component('my-component16',{
  template: '<p>' +
        '<slot><p>如果父组件没有插入内容,我将作为默认出现<</p></slot>' +    //预留的slot插槽
       '</p>'
});
var app16 = new Vue({
  el: '#app16'
});
登入後複製
渲染結果為:

<p id=”app16”>
  <p>
    <p>分发的内容<p>
    <p>更多分发的内容<p>
  </p>
</p>
登入後複製
 子元件

child-component 的範本內定義了一個<slot>元素,並且用一個<p>作為預設的內容,當父元件沒有使用slot 時,會渲染這段預設的文字;如果寫入了slot, 那就會替換整個<slot> 。

3.2具名slot

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

  <p id="app17">
      <my-component17>
        <h3 slot="header">标题</h3>
        <p>正文内容</p>
        <p>更多正文内容</p>
        <h3 slot="footer">底部信息</h3>
      </my-component17>
    </p>
Vue.component('my-component17',{
  template: '<p class="container">' +
         '<p class="header">' +
          '<slot name="header"></slot>' +
         '</p>' +
         '<p class="main">' +
          '<slot></slot>' +
         '</p>'+
         '<p class="footer">' +
          '<slot name="footer"></slot>' +
         '</p>'+
       '</p>'
});
var app17 = new Vue({
  el: '#app17'
});
登入後複製
渲染結果為:         

 <p id="app17">
        <p class="container">
          <p class="header">
            <h3>标题</h3></p>
          <p class="main"> 
            <p>正文内容</p> 
            <p>更多正文内容</p> 
          </p>
          <p class="footer">
            <h3>底部信息</h3>
          </p>
        </p>
      </p>
登入後複製
 子元件內宣告了3 個<s lot>元素,其中在<p class=」 main >內的<slotname> ,它將作為預設slot 出現,父元件沒有使用slot 特性的元素與內容都將出現在這裡。

如果沒有指定預設的匿名slot ,父元件內多餘的內容片段都將被拋棄。

四、作用域插槽

作用域插槽是一種特殊的slot ,使用一個可以重複使用的模板來取代己渲染元素。

看一個例子:     

 <p id="app18">
      <my-component18>
        <template scope="props">
          <p>来自父组件的内容</p>
          <p>{{props.msg}}</p>
        </template>
      </my-component18>
    </p>
Vue.component('my-component18',{
  template: '<p class="container"><slot msg="来自子组件的内容"></slot></p>'
});
var app18 = new Vue({
  el: '#app18'
});
登入後複製
觀察子元件的模板,在元素上有一個類似props 傳遞資料給元件的寫法msg=” xxx ”,將資料傳到了插槽。

父元件中使用了<template>元素,而且擁有一個

scope=」props ”的特性,這裡的props只是一個臨時變量,就像v-for= ” item in items 裡面的item 一樣,template 內可以透過臨時變數props存取來自子元件插槽的資料msg 。

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

#主要是讓元件的可擴充性更強。

1. 使用匿名slot

2. 給slot加個名字

如果不在有slot的組件裡加入任何標籤,slot什麼都不會顯示的。

相信看了本文案例你已經掌握了方法,更多精彩請關注php中文網其它相關文章!

推薦閱讀:

在案例中使用vue2.0 boostrap

node token做出使用者驗證

以上是vue+slot分送內容的詳細內容。更多資訊請關注PHP中文網其他相關文章!

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

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

vue中怎麼用bootstrap vue中怎麼用bootstrap Apr 07, 2025 pm 11:33 PM

在 Vue.js 中使用 Bootstrap 分為五個步驟:安裝 Bootstrap。在 main.js 中導入 Bootstrap。直接在模板中使用 Bootstrap 組件。可選:自定義樣式。可選:使用插件。

vue怎麼給按鈕添加函數 vue怎麼給按鈕添加函數 Apr 08, 2025 am 08:51 AM

可以通過以下步驟為 Vue 按鈕添加函數:將 HTML 模板中的按鈕綁定到一個方法。在 Vue 實例中定義該方法並編寫函數邏輯。

vue中的watch怎麼用 vue中的watch怎麼用 Apr 07, 2025 pm 11:36 PM

Vue.js 中的 watch 選項允許開發者監聽特定數據的變化。當數據發生變化時,watch 會觸發一個回調函數,用於執行更新視圖或其他任務。其配置選項包括 immediate,用於指定是否立即執行回調,以及 deep,用於指定是否遞歸監聽對像或數組的更改。

vue多頁面開發是啥意思 vue多頁面開發是啥意思 Apr 07, 2025 pm 11:57 PM

Vue 多頁面開發是一種使用 Vue.js 框架構建應用程序的方法,其中應用程序被劃分為獨立的頁面:代碼維護性:將應用程序拆分為多個頁面可以使代碼更易於管理和維護。模塊化:每個頁面都可以作為獨立的模塊,便於重用和替換。路由簡單:頁面之間的導航可以通過簡單的路由配置來管理。 SEO 優化:每個頁面都有自己的 URL,這有助於搜索引擎優化。

vue返回上一頁的方法 vue返回上一頁的方法 Apr 07, 2025 pm 11:30 PM

Vue.js 返回上一頁有四種方法:$router.go(-1)$router.back()使用 &lt;router-link to=&quot;/&quot;&gt; 組件window.history.back(),方法選擇取決於場景。

vue.js怎麼引用js文件 vue.js怎麼引用js文件 Apr 07, 2025 pm 11:27 PM

在 Vue.js 中引用 JS 文件的方法有三種:直接使用 &lt;script&gt; 標籤指定路徑;利用 mounted() 生命週期鉤子動態導入;通過 Vuex 狀態管理庫進行導入。

vue遍歷怎麼用 vue遍歷怎麼用 Apr 07, 2025 pm 11:48 PM

Vue.js 遍歷數組和對像有三種常見方法:v-for 指令用於遍歷每個元素並渲染模板;v-bind 指令可與 v-for 一起使用,為每個元素動態設置屬性值;.map 方法可將數組元素轉換為新數組。

vue的div怎麼跳轉 vue的div怎麼跳轉 Apr 08, 2025 am 09:18 AM

Vue 中 div 元素跳轉的方法有兩種:使用 Vue Router,添加 router-link 組件。添加 @click 事件監聽器,調用 this.$router.push() 方法跳轉。

See all articles