目錄
slot 插槽
元件的插槽" >元件的插槽
如何去封裝這類的元件呢? slot
如何封裝合適呢?
slot基本上使用
我是子组件
hahaha
具名插槽slot
作用域插槽
實質:
需求:
首頁 web前端 Vue.js Vue詳解之增加組件擴展性的slot

Vue詳解之增加組件擴展性的slot

Aug 10, 2022 pm 03:09 PM
vue

這篇文章為大家帶來了關於vue的相關知識,其中主要介紹了增加組件擴展性的slot的相關問題,組件的插槽也是為了讓我們封裝的組件更加具有擴充性,讓使用者可以決定元件內部的一些內容到底展示什麼,下面一起來看一下,希望對大家有幫助。

Vue詳解之增加組件擴展性的slot

【相關推薦:javascript影片教學vue.js教學

slot 插槽

元件的插槽

  • #元件的插槽也是為了讓我們封裝的元件更有擴展性

  • 讓使用者可以決定元件內部的一些內容到底要展示什麼。

如何去封裝這類的元件呢? slot

它們也很多區別,但也有很多共性

如果,我們每一個單獨去封裝一個元件,顯然不合適:例如每個頁面都返回,這部分內容我們就要重複去封裝。
但是,如果我們封裝成一個,好像也不合理:有些左側是選單,有些是返回,有些中間是搜索,有些是文字,等等。

如何封裝合適呢?

抽取共通性,保留不同。

最好的封裝方式就是將共性抽取到元件中,將不同曝光為插槽。
一旦我們預留了插槽,就可以讓使用者根據自己的需求,決定插槽中插入什麼內容。
是搜尋框,還是文字,還是選單。由調用者自己決定。

slot基本上使用

  • 在子元件中,使用特殊的元素就可以為子元件開啟一個插槽。
  • 該插槽插入什麼內容取決於父元件如何使用。

透過一個簡單的例子,來為子元件定義一個插槽:
<slot></slot>中的內容表示,如果沒有在該元件中插入任何其他內容,就預設顯示該內容
Vue詳解之增加組件擴展性的slot

nbsp;html>



    <meta>
    <meta>
    <title>Document</title>
    <script></script>



    <div>
        <cpn><button>按钮</button></cpn>
        <cpn><span>aaaaa</span></cpn>
    </div>
    <template>
        <div>
            <h2 id="我是子组件">我是子组件</h2>
            <h3 id="hahaha">hahaha</h3>
            <slot></slot>
        </div>
    </template>
    <script>
        let app = new Vue({
            el: &#39;#app&#39;,
            components: {
                cpn: {
                    template: &#39;#cpn&#39;,
                }
            }
        })
    </script>


登入後複製

具名插槽slot

當子元件的功能複雜時,子元件的插槽可能並非是一個

例如我們封裝一個導覽列的子元件,可能就需要三個插槽,分別代表左邊、中間、右邊。那麼,外面在插入內容給插槽時,如何區分插入的是哪一個呢?

如何使用具名插槽呢?

  • 只要給slot元素一個name屬性即可
  • <slot name="myslot"></slot>
#
nbsp;html>



    <meta>
    <meta>
    <title>Document</title>
    <script></script>



    <div>
        <cpn><button>按钮1</button></cpn>
        <cpn><span>aaaaa</span>
            <button>按钮2</button></cpn>
    </div>
    <template>
        <div>
            <h2 id="我是子组件">我是子组件</h2>
            <h3 id="hahaha">hahaha</h3>
            <slot></slot><br>
            <slot></slot>
        </div>
    </template>
    <script>
        let app = new Vue({
            el: &#39;#app&#39;,
            components: {
                cpn: {
                    template: &#39;#cpn&#39;,
                }
            }
        })
    </script>


登入後複製

作用域插槽

實質:

#父元件取代插槽的標籤,但是內容由子元件來提供

需求:

子元件中包含一組數據,例如:pLanguages: ['JavaScript', 'Python', 'Swift', 'Go', 'C ']
需要在多個介面進行展示:

  • 某些介面是以水平方向一一展示的
  • 某些介面是以列表形式展示的
  • 某些介面直接展示一個陣列

內容在子元件,希望在父元件中展示:

  • 利用slot作用域插槽

在父元件使用我們的子元件時,從子元件中拿到資料:

  • 透過<template slot-scope="slotProps"></template>取得到slotProps屬性
  • 透過slotProps.data就可以取得到剛才我們傳入的data了
#
<div>
        <cpn></cpn>
        <cpn>
            <template>
                <span>{{slot.data.join('-')}}</span>
            </template>
        </cpn>
        <cpn>
            <template>
                <span>{{slot.data.join('*')}}</span>
            </template>
        </cpn>
    </div>
登入後複製
<template>
        <div>
            <slot>
                <ul>
                <li>{{item}}</li>
                </ul>
            </slot>
        </div>
    </template>
登入後複製

Vue詳解之增加組件擴展性的slot

nbsp;html>



    
    
    Document
    <script></script>



    <div>
        <cpn></cpn>
        <cpn>
            <template>
                <span>{{slot.data.join('-')}}</span>
            </template>
        </cpn>
        <cpn>
            <template>
                <span>{{slot.data.join('*')}}</span>
            </template>
        </cpn>
    </div>
    <template>
        <div>
            <slot>
                <ul>
                <li>{{item}}</li>
                </ul>
            </slot>
        </div>
    </template>
    <script>
        let app = new Vue({
            el: &#39;#app&#39;,
            components: {
                cpn: {
                    template: &#39;#cpn&#39;,
                    data() {
                        return {
                            pLanguages: [&#39;JavaScript&#39;, &#39;Python&#39;, &#39;Swift&#39;, &#39;Go&#39;, &#39;C++&#39;],
                        }
                    }
                }
            }
        })
    </script>


登入後複製

【相關推薦:javascript影片教學vue.js教學

以上是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.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:30 PM

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

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