vue 具名插槽詳解專題及常見問題 - CSDN

2021-01-09 CSDN技術社區
插槽含義:就是引入子組件後,在插入子組件元素中添加信息或者標籤,使得子組件的指定位置插入信息或者標籤插槽有三種:默認插槽、具名插槽、作用域插槽,由於vue2.6.0後對插槽進行修改,但是兼容2.6.0前的版本,博文中只說明2.6.0後的插槽,vue3.0後面會去除2.60前的版本兼容  一、默認插槽

<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>默認插槽</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> {{message}} <tode-item>這是一個默認插槽<h3>這是標籤h3</h3></tode-item> </div> </body> <script type="text/javascript">
    //子組件 Vue.component('tode-item', { template: `<div> <slot>這裡面是slot的默認值</slot>//當引入組件的地方沒有寫插槽內容,將顯示子組件插槽中默認的值,如果沒有默認值也沒用寫插槽內容,則插槽內容為空。 </div>` }); var app = new Vue({ el: "#app", data: { message: 'hello world!' } }); </script></html>

  二、具名插槽: 子組件中有多個插槽,通過給插槽指定名稱方式實現一 一對應。

  

<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>具名插槽</title> <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> </head> <body> <div id="app"> 這是2.60版本後使用v-slot引入插槽名稱 <my-component> <template v-slot:first>nihao</template> <template v-slot:last>hi</template> </my-component> <!-- 這是具名插槽縮寫方案 v-slot:縮寫為 # --> <my-component> <template #first>nihao</template> <template #last>hi</template> </my-component> </div> </body> <script type="text/javascript"> Vue.component('my-component',{ template: ` <div> <h4>這是第一個具名插槽</h4> <slot name='first'></slot> <h4>這是第二個具名插槽</h4> <slot name='ast'></slot> </div>` }) let app = new Vue({ el: "#app", data: { } }) </script></html>

  三、作用域插槽:把子組件data中的數據或者子組件props中的數據傳到父組件的插槽中使用

    1) 兩個屬性合併成了一個  v-slot : 插槽名稱 = ' 傳過來的值 ' 。

    2) 組件頁面中slot的內容沒有變化 。

    3) v-slot 不能用在 html 標籤上 。

    4) 如果是默認插槽 可以寫成  v-slot='xxx'。

    5) 還增加了  可以解構插槽props 和 設置默認值的內容,具體的可以查看官網 解構插槽

<!DOCTYPE html><html> <head> <meta charset="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1"> <title>作用域插槽</title> <script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script> <!-- <script type="text/javascript" src="vue.js"></script> --> </head> <body> <div id="app"> <my-component :message='msg'> <!--這裡的val也是隨便取的名稱,不與任何地方對應--> <template v-slot:listbox='val'> <p>{{val.send.text}}</p> </template> <!--這裡的thing是隨便取的名稱,不與任何地方對應--> <div slot='sayWhat' slot-scope='thing'>這是2.60版本前的寫法:{{thing.said}}</div> <!-- 注意作用域插槽最好用於子組件的slot是批量循環的情況,子組件的slot是非批量循環的情況下無效,子組件中slot我們這樣想:如果只是傳一個值,有沒有必要使用插槽?直接在子組件中寫就行了,何必多次一舉。 --> <!-- 這是無效的寫法 <div v-slot:sayWhat='thing'>說了:{{thing.said}}</div> --> <!-- 這是無效的寫法 <template v-slot:sayWhat='thing'> {{thing.said}} </template> --> </my-component> </div> </body> <script type="text/javascript"> Vue.component('my-component',{ template: ` <div> <slot name='listbox' v-for='value in list' :send='value'></slot> <slot name='sayWhat' :said='message'></slot> </div> `, props:['message'], data(){ return { list:[ { "id":10, "text":"蘋果" },{ "id":20, "text":"香蕉" },{ "id":30, "text":"梨" },{ "id":40, "text":"芒果" }, ] } } }) let app = new Vue({ el: "#app", data: { msg: '這是動態傳入的slot的內容', } }) </script></html>

 

  

4. 新增的還有 動態插槽名

  什麼是動態插槽名?大致就是動態指令參數也可以用在v-slot上,這個就要涉及到2.6.0新增的  動態參數

<template v-slot:[attrContent]='msg'> xxx</template>

    這個 attrContent  會被作為一個 JavaScript 表達式進行動態求值,求得的值將會作為最終的參數來使用。 比如這裡attrContent 最終的值為 default  則渲染出來的結果 就是 v-slot:default='msg' 。

    注意:

    1) 單獨在 [ ] 方括號中也可以使用表達式,但是不能存在引號和空格

    2) 當然 這個動態的值  可以通過 方法,計算屬性,或者 data數據 裡面的內容。重要的是這個動態的值 是 引用組件的 作用域。簡單點說就是父級組件的作用域。

    例如,上面 v-slot:sayWhat='thing'  可以寫成:

    1) v-slot:[first+sec]='thing'    注意 加號兩邊不能留空格

    2) v-slot:[attr]='thing'

    3) v-slot:[attrs]='thing'

    4) v-slot:[getattr()]='thing'

 

export default{ data () { return { msg: '這是動態傳入的slot的內容', attr:'sayWhat', first:'say', sec:'What', } }, components:{ slotScope }, computed:{ attrs:function(){ return 'sayWhat' } }, methods:{ getattr(){ return 'sayWhat' } }}

參考:https://www.cnblogs.com/zjjDaily/p/10518546.html

相關焦點

  • vue 作用域插槽的使用專題及常見問題 - CSDN
    關於vue插槽,也用過很多次了,但是關於作用域插槽的用法,有些模糊,查了很多文檔,自己理解記憶。在官網上說:那麼問題來了,肯定會有這樣的業務需求啊,這時候,就要用作用域插槽了。我將這個概念理解為:子組件的插槽要在父組件裡使用子組件內部的數據,可以靈活的渲染子組件的dom結構以及數據。
  • table vue插槽的使用 - CSDN
    插槽,也就是slot,是組件的一塊HTML模板,這塊模板顯示不顯示、以及怎樣顯示由父組件來決定。 實際上,一個slot最核心的兩個問題在這裡就點出來了,是顯示不顯示和怎樣顯示。但是插槽顯示的位置卻由子組件自身決定,slot寫在組件template的什麼位置,父組件傳過來的模板將來就顯示在什麼位置。1、插槽內容  vue實現了一套內容分發的api,將 slot 元素作為承載內容分發的出口。  插槽內可以包含任何模板代碼,包括html,以及其他組件。
  • slot vue 具名專題及常見問題 - CSDN
    vue的slot1、什麼是slotslot是插槽,插即是可以插入,槽就是坑,即是可以再代碼中插入如果子組件模板中不包含插口,那麼父組件的內容將會被丟棄。當子組件模板中有一個麼有屬性的插槽時,父組件傳入的整個內容片段,將插入到插槽所在的dom的位置,並替換掉插槽標籤本身。
  • template標籤 vue 作用專題及常見問題 - CSDN
    template slot="footer"> <p>底部信息信息1</p> <p>底部信息信息2</p> </template> </base-layout> </div> <script type="text/javascript" src="js/vue.js
  • slot vue 用法專題及常見問題 - CSDN
    具名插槽<template> <div> <!-- 具名插槽 --> <span style="display:block;">具名插槽</span> <!
  • a標籤 href vue專題及常見問題 - CSDN
    vue.js 實現a標籤href裡添加參數原始碼列表可以正常顯示,但是連接沒有實現對items.orderNo的值轉化,最中解決方法
  • ref vue 獲取文本專題及常見問題 - CSDN
    ref的官網介紹https://cn.vuejs.org/v2/api/#ref需求在普通的js操作中,一般都是直接操作dom元素,但是對於Vue.js框架來說,一般是不允許直接操作dom元素的。那麼其實Vue.js框架提供了ref獲取dom元素,以及組件引用。
  • 如何寫一個vue組件專題及常見問題 - CSDN
    如何使用vue寫一個組件庫新建vue項目使用vue-cli初始化一個項目:vue init webpack VueComponentcd VueComponentnpm installnpm run dev以上就新建好了一個vue項目項目目錄首先,定義好目錄,經過觀察大多數的組件庫,基本是這樣的目錄
  • Vue之插槽(slot)
    插槽簡述和作用(一對一)官宣:<slot>元素作為承載分發內容的出口。簡單的說其實就是一個組件留的一個可擴張的輸出功能,用一個簡單的示例就明白了通過上面的代碼,相信大家也簡單的明白了插槽的含義了吧。就是「內部」的補充。比如圖標定義,動態內容定義,都可以通過slot的方法來完成。
  • 卡方檢驗結果分析專題及常見問題 - CSDN
    簡單統計之後,得到總數和死亡率:此處需要使用到ggbarstats函數,其參數可謂是非常的多,詳細的參數表我放在另一個博客中了,有興趣的朋友可以去看看(https://blog.csdn.net/m0_45248682/article/details/104086729)。
  • f檢驗 matlab專題及常見問題 - CSDN
    15.71985 15.91986 15.71987 16.71988 15.31989 16.11990 16.2MATLAB實現參考網上多個代碼可得https://www.ilovematlab.cn/thread-246993-1-1.htmlhttps://blog.csdn.net
  • vue組件詳解—使用slot分發內容
    三、slot用法3.1 單個slot在子組件內使用特殊的<slot>元素就可以為這個子組件開啟一個slot(插槽),在父組件模板裡,插入在子組件標籤內的所有內容將替代子組件的<slot> 標籤及它的內容。
  • vuejs 傳值給組件專題及常見問題 - CSDN
  • android啟動頁設計專題及常見問題 - CSDN
    轉載請註明出處:http://blog.csdn.net/wangjihuanghun/article/details/63255144啟動頁幾乎成為了每個app的標配,有些商家在啟動頁中增加了開屏廣告以此帶來更多的收入。
  • vue高級進階系列——用typescript玩轉vue和vuex
    本文轉載自【微信公眾號:趣談前端,ID:beautifulFront】經微信公眾號授權轉載,如需轉載與原文作者聯繫用過vue的朋友大概對vuex也不陌生,vuex的官方解釋是專為 Vue.js 應用程式開發的狀態管理模式。它採用集中式存儲管理應用的所有組件的狀態,並以相應的規則保證狀態以一種可預測的方式發生變化。
  • 什麼是VUE?VUE與JS的對比
    1.1. vue的引入先看下面這樣一個簡單的例子,實現了這樣一個功能數據的雙向綁定:也就是數據的同步修改我們需要讓所有綁定的對象和元素都能感知到變化1.1.1. vue與js的對比1.1.1.1. js的實現(了解)<!
  • 卡方檢驗相關性專題及常見問題 - CSDN
    那麼有一個問題:協方差數值大小是否代表了相關程度呢?也就是說如果協方差為 100 是否一定比協方差為 10 的正相關性強呢?假如X1、Y1 和 X2、Y2 分別聯合分布圖,如下所示:考察兩個變量的相關關係,首先得看清楚兩個變量都是什麼類型的,統計分析中常見的變量類型有連續型數值變量,無序分類變量、有序分類變量:連續型數值變量:如銷售額、氣溫、工資收入、考試成績;無序分類變量:如性別男和女,血型種類;有序分類變量:如學歷水平小學、初中、高中
  • Vue全家桶之什麼是Vuex
    對於問題一,傳參的方法對於多層嵌套的組件將會非常繁瑣,並且對於兄弟組件間的狀態傳遞無能為力。對於問題二,我們經常會採用父子組件直接引用或者通過事件來變更和同步狀態的多份拷貝。以上的這些模式就會變得非常脆弱,通常會導致無法維護的代碼。
  • Vue 3 的最新進展
    尤雨溪表示,由於在 Vue 3 上花費的大部分時間都投入到了設計和構建穩定的內核上,不過要讓整個框架處於"ready"狀態,不僅僅是內核的問題,還需要有兼容版本的支持庫 (Vue Router, Vuex, test utils)、工具(CLI、eslint 插件、瀏覽器開發工具擴展、IDE 擴展)和文檔(包括針對新用戶和用於遷移的文檔)。
  • vue3.0手機聊天室|Vue3+Vant3仿微信界面
    項目簡介Vue3Chat是基於vue3.x+vuex4+vue-router4全家桶技術和vant3.x構建開發的一款mobile仿微信界面聊天實例。實現了發送圖文消息、圖片|視頻預覽、位置查看、紅包|朋友圈等功能。