vue 作用域插槽的使用專題及常見問題 - CSDN

2021-01-09 CSDN技術社區

關於vue插槽,也用過很多次了,但是關於作用域插槽的用法,有些模糊,查了很多文檔,自己理解記憶。

在官網上說:

舉例:你現在有一個組件,這個組件叫:navigation-link,它裡面有一個匿名插槽,它被在另一個組建中調用,並且傳入一個url,要在這個組件中渲染出來:

<navigation-link url="/profile"> <span> {{ url }}</span></navigation-link>

這當然是不可能的,span標籤裡的url會是undefined,這裡的 url 會是 undefined,因為 「/profile」 是 傳遞給 <navigation-link> 的, 而不是 在 <navigation-link> 組件內部定義的。

那麼問題來了,肯定會有這樣的業務需求啊,這時候,就要用作用域插槽了。

我將這個概念理解為:子組件的插槽要在父組件裡使用子組件內部的數據,可以靈活的渲染子組件的dom結構以及數據

emmmm,可能有點繞,但是舉例:

設想一個帶有如下模板的 <current-user> 組件:

<span> <slot>{{ user.name}}</slot></span>

我們可能想換掉備用內容,用性別而不是姓名顯示。如下:

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

然而上述代碼不會正常工作,因為只有 <current-user> 組件可以訪問到 user, 而我們提供的內容是在父級渲染的。

為了讓 user 在父級的插槽內容中可用,我們可以將 user 作為<current-user>組件裡的 <slot> 元素的一個特性綁定上去:

<span> <slot :user="user"> {{ user.name}} // 插槽默認內容是user.name </slot></span>

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

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

這裡說明:
1,這個作用域插槽必須使用模板template,
2,這個v-slot:default,是2.6.0以後的新語法,表示匿名插槽,如果是具名插槽<slot name="footer">,應該是v-slot:footer
3,這個slotProps是隨便起的名字,高興就好

ok,以上就解釋完了,當然,這是基礎版示例,當自己開發獨立組件的時候,還可以在template中自定義子組件插槽中的dom結構,比如:

// 引用1<current-user> <template v-slot:default="slotProps"> <ul> <li v-for="(item, index) in slotProps.userList"> {{item.name}}</li> </ul> </template></current-user>// 引用2<current-user> <template v-slot:default="myScope"> <div> <h1>{{myScope.apple.size}}</h1> <p>{{myScope.apple.color}}</p> </div> </template></current-user>

這是不是很靈活,看起來so beautiful,當然你還可以把父組件的數據傳入子組件,然後使用作用域插槽在父組件中渲染,更加靈活。

推薦一篇博文,寫的很仔細,從頭看完就明白了。

相關焦點

  • vue 具名插槽詳解專題及常見問題 - CSDN
    插槽含義:就是引入子組件後,在插入子組件元素中添加信息或者標籤,使得子組件的指定位置插入信息或者標籤插槽有三種:默認插槽、具名插槽、作用域插槽,由於vue2.6.0後對插槽進行修改,但是兼容2.6.0前的版本,博文中只說明2.6.0後的插槽,vue3.0後面會去除2.60前的版本兼容  一、默認插槽<
  • table vue插槽的使用 - CSDN
    2、編譯作用域  規則:父級模板裡的所有內容都是在父級作用域中編譯的;子模板裡的所有內容都是在子作用域中編譯的。3、後備內容  有時為一個插槽設置具體的後備 (也就是默認的) 內容是很有用的,它只會在沒有提供內容的時候被渲染。  很簡單,就是默認值的概念。
  • slot vue 具名專題及常見問題 - CSDN
    vue的slot1、什麼是slotslot是插槽,插即是可以插入,槽就是坑,即是可以再代碼中插入如果子組件模板中不包含插口,那麼父組件的內容將會被丟棄。當子組件模板中有一個麼有屬性的插槽時,父組件傳入的整個內容片段,將插入到插槽所在的dom的位置,並替換掉插槽標籤本身。
  • template標籤 vue 作用專題及常見問題 - CSDN
    lt;/div> ` }); var vm = new Vue({ el: '#app', data: { } }); </script></body></html>這裡父組件模板中template的作用
  • slot vue 用法專題及常見問題 - CSDN
    -- 廢棄語法, 直接在元素上使用 slot --> <!-- <el-button slot="content" type="success">具名插槽</el-button> --> <!
  • 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)的組件,下面我接著講一講一對多(slot)的時候的用法。v-slot:使用說明(一對多)v-slot:是主要針對具名插槽 也就是多個slot中需要用到的功能,在這裡我以官方的DEMO來做簡單的說明 以上為定義好的具名插槽模板(<base-layout>)。
  • vue組件詳解—使用slot分發內容
    二、作用域<child-component>{{ message }}</child-component>這裡的message 就是一個slot ,但是它綁定的是父組件的數據,而不是組件
  • 卡方檢驗結果分析專題及常見問題 - CSDN
    一般常見的卡方分析是2x2列聯表形式,例如服用某種藥物是否對死亡率有影響:(自己編的數據)簡單統計之後,得到總數和死亡率:原假設是:服藥組和未服藥組之間頻數無顯著差異(服藥對死亡率無影響)先計算自由度:(行數-1)*(列數-1)=1這個是卡方的計算公式,R代表實際值,T代表理論值,理論值需要進一步計算才可以知道。
  • c++ 槽函數專題及常見問題 - CSDN
    是不可拷貝的,如果將signal作為類的成員變量,那麼類將不能被拷貝,除非使用只能智能或者是引用間接的持有它;signal是一個模板類,它的定義如下:以上兩種方法都是可以的; 臨時連接Boost提供了一個臨時的連接方式scoped_connection,也就是有作用域的連接;
  • 如何在vue項目中使用sass並設置元素樣式
    elementJavaScriptsassCSS3 在創建vue框架項目時,可以使用CSS3定義元素樣式;還可以使用sass動態變量定義元素樣式如果直接使用sass,啟動項目會出現報錯。那麼,如何在vue項目中使用sass?
  • 在vue項目中使用vuex實現狀態管理的案例
    並不需要使用vuex。vuex的使用與否在實際開發中應該視項目情況而定。準備工作:a.在vue項目中安裝vuex: npm install vuex -S。b.了解下vuex的五個屬性。vuex個屬性五個屬性的作用:state:用來存儲vuex的基本數據。
  • 什麼是MVVM,MVC和MVVM的區別,MVVM框架VUE實現原理
    在過去的10年中,我們已經把很多傳統的服務端代碼放到了瀏覽器中,這樣就產生了成千上萬行的javascript代碼,它們連接了各式各樣的HTML 和CSS文件,但缺乏正規的組織形式,這也就是為什麼越來越多的開發者使用javascript框架。比如:angular、react、vue。
  • 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高級進階系列——用typescript玩轉vue和vuex
    說的簡單點就是對vue的狀態進行統一管理,如下圖介紹了其管理模式:最簡單的使用方法長這樣的:// 如果在模塊化構建系統中,請確保在開頭調用了 Vue.use(Vuex)const store = new Vuex.Store({state: {count: 0},mutations: {increment
  • vuejs 傳值給組件專題及常見問題 - CSDN
  • 什麼是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