table vue插槽的使用 - CSDN

2021-01-15 CSDN技術社區

  插槽,也就是slot,是組件的一塊HTML模板,這塊模板顯示不顯示、以及怎樣顯示由父組件來決定。 實際上,一個slot最核心的兩個問題在這裡就點出來了,是顯示不顯示怎樣顯示

  由於插槽是一塊模板,所以,對於任何一個組件,從模板種類的角度來分,其實都可以分為非插槽模板插槽模板兩大類。

  非插槽模板指的是html模板,比如『div、span、ul、table』這些,非插槽模板的顯示與隱藏以及怎樣顯示由組件自身控制;

  插槽模板是slot,它是一個空殼子,因為它的顯示與隱藏以及最後用什麼樣的html模板顯示由父組件控制。但是插槽顯示的位置卻由子組件自身決定,slot寫在組件template的什麼位置,父組件傳過來的模板將來就顯示在什麼位置

1、插槽內容

  vue實現了一套內容分發的api,將 slot 元素作為承載內容分發的出口。

  插槽內可以包含任何模板代碼,包括html,以及其他組件。

  如果組件內沒有一個 slot 元素,那麼該組件起始標籤和結束標籤之間的任何內容都會被拋棄。

2、編譯作用域

  規則:父級模板裡的所有內容都是在父級作用域中編譯的;子模板裡的所有內容都是在子作用域中編譯的

3、後備內容

  有時為一個插槽設置具體的後備 (也就是默認的) 內容是很有用的,它只會在沒有提供內容的時候被渲染。

  很簡單,就是默認值的概念。<slot>Submit</slot>

4、具名插槽

  需要多個插槽的情況,slot 元素有一個特殊的屬性:name,用來定義額外的插槽。一個不帶 name 的 <slot> 出口會帶有隱含的名字「default」。

  在向具名插槽提供內容的時候,我們可以在一個 <template> 元素上使用 v-slot 指令,並以 v-slot 的參數的形式提供其名稱:

<template v-slot:footer> <p>Here's some contact info</p></template>

  現在 <template> 元素中的所有內容都將會被傳入相應的插槽。任何沒有被包裹在帶有 v-slot 的 <template> 中的內容都會被視為默認插槽的內容。

  注意:v-slot只能添加在一個 <template> 上(有一種例外),這一點和已廢棄的slot特性不同

5、作用域插槽

<current-user> {{ user.firstName }}</current-user>

  上述代碼不會正常工作,因為只有 <current-user> 組件可以訪問到 user 而我們提供的內容是在父級渲染的。為了讓 user 在父級的插槽內容可用,我們可以將 user 作為 <slot> 元素的一個特性綁定上去:

<span> <slot v-bind:user="user"> {{ user.lastName }} </slot></span>

  綁定在 <slot> 元素上的特性被稱為插槽 prop。現在在父級作用域中,我們可以給 v-slot 帶一個值來定義我們提供的插槽 prop 的名字:

<current-user> <template v-slot:default="slotProps"> {{ slotProps.user.firstName }} </template></current-user>

  我們選擇將包含所有插槽 prop 的對象命名為 slotProps,但你也可以使用任意你喜歡的名字。

  (1)獨佔默認插槽縮寫方式:

  當被提供的內容只有默認插槽時,組件的標籤才可以被當作插槽的模板來使用。這樣我們就可以把 v-slot 直接用在組件上,這也就是上面說的例外情況

<current-user v-slot:default="slotProps"> {{ slotProps.user.firstName }}</current-user>

  注意:只要出現多個插槽,請始終為所有的插槽使用完整的基於 <template> 的語法

  (2)解構插槽:

  作用域插槽的內部工作原理是將你的插槽內容包括在一個傳入單個參數的函數裡,這意味著 v-slot 的值實際上可以是任何能夠作為函數定義中的參數的 JavaScript 表達式,所以可以利用ES6的解構來傳入參數

<current-user v-slot="{ user: person }"> {{ person.firstName }}</current-user>

  解構:v-slot="{ user }"

  重命名:v-slot="{ user: person }"

  定義默認值:v-slot="{ user = { firstName: 'Guest' } }"

6、動態插槽名

  <template v-slot:[dynamicSlotName]> ... </template>

7、縮寫

  v-slot:header 可以被重寫為 #header

8、其他示例

  主要來自官網學習整理:https://cn.vuejs.org/v2/guide/components-slots.html 

相關焦點

  • vue 具名插槽詳解專題及常見問題 - CSDN
    插槽含義:就是引入子組件後,在插入子組件元素中添加信息或者標籤,使得子組件的指定位置插入信息或者標籤插槽有三種:默認插槽、具名插槽、作用域插槽,由於vue2.6.0後對插槽進行修改,但是兼容2.6.0前的版本,博文中只說明2.6.0後的插槽,vue3.0後面會去除2.60前的版本兼容  一、默認插槽<
  • vue 作用域插槽的使用專題及常見問題 - CSDN
    關於vue插槽,也用過很多次了,但是關於作用域插槽的用法,有些模糊,查了很多文檔,自己理解記憶。在官網上說:那麼問題來了,肯定會有這樣的業務需求啊,這時候,就要用作用域插槽了。我將這個概念理解為:子組件的插槽要在父組件裡使用子組件內部的數據,可以靈活的渲染子組件的dom結構以及數據。
  • 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
  • Vue之插槽(slot)
    以上說的都是以插槽內容為主的使用說明,都是一對一(slot)的組件,下面我接著講一講一對多(slot)的時候的用法。v-slot:使用說明(一對多)v-slot:是主要針對具名插槽 也就是多個slot中需要用到的功能,在這裡我以官方的DEMO來做簡單的說明 以上為定義好的具名插槽模板(<base-layout>)。
  • vue-element-admin 4.0.0 正式版發布
    重大改變 基於 vue-cli@3進行構建 調整了項目的目錄結構 mock 文件移至根目錄下 layout 從 views 文件夾下移至 src 下 使用了最新的 eslint-plugin-vue
  • 如何寫一個vue組件專題及常見問題 - CSDN
    如何使用vue寫一個組件庫新建vue項目使用vue-cli初始化一個項目:vue init webpack VueComponentcd VueComponentnpm installnpm run dev以上就新建好了一個vue項目項目目錄首先,定義好目錄,經過觀察大多數的組件庫,基本是這樣的目錄
  • ref vue 獲取文本專題及常見問題 - CSDN
    ref的官網介紹https://cn.vuejs.org/v2/api/#ref需求在普通的js操作中,一般都是直接操作dom元素,但是對於Vue.js框架來說,一般是不允許直接操作dom元素的。那麼其實Vue.js框架提供了ref獲取dom元素,以及組件引用。
  • a標籤 href vue專題及常見問題 - CSDN
    vue.js 實現a標籤href裡添加參數原始碼列表可以正常顯示,但是連接沒有實現對items.orderNo的值轉化,最中解決方法
  • Element- UI 點擊按鈕實現樹形數據table全部展開和摺疊
    本文中element-ui版本為 2.13.0Element- UI中樹形數據table有一個屬性default-expand-all是控制樹形數據的展開和摺疊的,但是我們如果使用按鈕動態更改該屬性是沒有效果的,因為其只在table第一次初始化的時候有效。
  • slot vue 用法專題及常見問題 - CSDN
    匿名插槽<template> <div> <!-- 匿名插槽 --> <!-- 一個模板中只能有一個匿名插槽 --> <span style="display:block;">匿名插槽</span> <!
  • 在vue項目中使用vuex實現狀態管理的案例
    並不需要使用vuex。vuex的使用與否在實際開發中應該視項目情況而定。準備工作:a.在vue項目中安裝vuex: npm install vuex -S。b.了解下vuex的五個屬性。vuex個屬性五個屬性的作用:state:用來存儲vuex的基本數據。
  • vue高級進階系列——用typescript玩轉vue和vuex
    說的簡單點就是對vue的狀態進行統一管理,如下圖介紹了其管理模式:最簡單的使用方法長這樣的:// 如果在模塊化構建系統中,請確保在開頭調用了 Vue.use(Vuex)const store = new Vuex.Store({state: {count: 0},mutations: {increment
  • 如何在vue項目中使用sass並設置元素樣式
    GitnpmHBuilder瀏覽器技術vueelementJavaScriptsassCSS3 在創建vue框架項目時,可以使用CSS3定義元素樣式;還可以使用sass動態變量定義元素樣式如果直接使用sass,啟動項目會出現報錯。那麼,如何在vue項目中使用sass?
  • 什麼是VUE?VUE與JS的對比
    /node_modules/vue/dist/vue.js"></script></head><body><!--2.描述(vue的發展史)1.2.2.概念vue是一個構建用戶界面的框架(庫),它的目標是通過儘可能簡單的api實現響應的數據綁定和組合的視圖集合 vue自身不是一個全能框架的核心是只關注視圖層,因此它非常容易學習,非常容易與其它庫或已有項目整合 vue在與相關工具和支持庫一起使用時, 也能完美地驅動複雜的單頁應用
  • 如何創建vue項目並使用element框架中的el-select
    1、在電腦硬碟上,找到一個位置,新建一個文件夾wmn;滑鼠右鍵選擇Git Bash Here,並在Git窗口輸入cnpm install --global vue-cli命令:cnpm install --global vue-cli
  • 5分鐘帶你入門vuex(vue狀態管理)
    如果你之前使用過vue.js,你一定知道在vue中各個組件之間傳值的痛苦,在vue中我們可以使用vuex來保存我們需要管理的狀態值,值一旦被修改,所有引用該值的地方就會自動更新,那麼接下來我們就來學習一下vuex是如何修改狀態值的:我們新建一個vue項目(這裡由於我們是講解vuex,所以對於vue項目的創建我們不會講解太詳細);在命令行輸入 vue init
  • Vue+Axios+Vuex+Vux+Vue-Router全家桶搭建前端框架
    開發成本也就高了;二、再來看看React,出身名門FaceBook,社區比較多,而且還可以跨平臺運行,React-Native可以實現一次編寫,安卓、蘋果、web通殺;但是學習也需要一段時間,而且後期維護也不容易;其他的我們就不一一介紹了,最後來看看今天的重頭戲Vue;三、Vue,值得我們驕傲的是,國人發明的,一款漸進式框架,能與現有項目無縫融合,也就是說現有項目可以逐步更新替換使用
  • Vuex你從沒使用過的優化方案!
    儘管儀錶板將僅由一小部分用戶和應用程式的受限區域(假設在/admin路徑下)使用,由於靜態Vuex模塊的集中註冊,它的所有代碼都將在主程序包中。所以這肯定不是我們想要的結果,我們更加希望每個Vuex模塊模塊的註冊是根據頁面大的分類路由模塊來註冊的,這樣就能夠不是在程序初始化的時候就被加載。並且可以將其打包在不同的代碼塊中,或者在需要時懶加載。這個時候動態模塊就可以幫到我們了!
  • Vue全家桶之什麼是Vuex
    試想一下,如果在一個項目開發中頻繁的使用組件傳參的方式來同步data中的值,一旦項目變得很龐大,管理和維護這些值將是相當棘手的工作。為此,Vue為這些被多個組件頻繁使用的值提供了一個統一管理的工具——VueX。也就是說如果您需要構建一個中大型單頁應用,您很可能會考慮如何更好地在組件外部管理數據狀態,Vuex 將會成為自然而然的選擇。為什麼使用Vuex ?