(十)插槽 solt 具名插槽 作用域插槽

来源:https://www.cnblogs.com/tcz1018/archive/2020/06/04/13043232.html
-Advertisement-
Play Games

插槽 作用:官方解釋就是vue實現一套內容分發機制,將元素作為承載分發內容的出口 ,就是視圖層和數據層進行展示的時候不要直接綁定數據,而是進行數據的上傳 個人理解,就還是父子組件的傳值 就像是父組件你把東西給我,我用用,然後我把我全部的加上你給我的一塊給你 在官網上邊 父到子 是prope 傳值 , ...


插槽

作用:官方解釋就是vue實現一套內容分發機制,將元素作為承載分發內容的出口
,就是視圖層和數據層進行展示的時候不要直接綁定數據,而是進行數據的上傳
個人理解,就還是父子組件的傳值
就像是父組件你把東西給我,我用用,然後我把我全部的加上你給我的一塊給你

  1. 在官網上邊 父到子 是prope 傳值 ,在父組件顯示子組件的內容
  2. 在官網上邊 子到父 是事件傳值 ,衍生出官網的自定義事件,
    這兩個都時進行數據上傳下發
  3. 插槽就不一樣了 (你先明白為什麼要在父組件裡面引用子組件,因為這是子組件可以共用是吧 舉個例子 表格 我的父組件就是一個表格 裡邊沒有內容 子組件就是一個個的行 我調用子組件的來顯示,然後呢我還想子組件裡面顯示相應的內容 用傳值不行)就得用插槽了

基本使用--很簡單的例子:

子組件:

<template>
   <div>
   		<h2>你叫什麼名字</h2>
   		<slot></slot>
	</div>
</template>
<script>
export default{
	name:'children'
}
</script>

父組件:


<template>
  <div>
    <p>使用solt傳值:我來告訴你你叫什麼名字</p>
    <div style="color:red;">
      <children>
        <div>你的名字叫小坦克</div>
      </children>
    </div>
  </div>
</template>
<script>
import children from "./zi";
export default {
  components: {
    children
  }
};
</script>

要是沒子組件裡面沒有寫插槽,父組件是不能把元素穿進去的

具名插槽(在多個插槽時進行名字區分)

舉例子:
子組件

<template>
  <div>
    <div>
      <h2>爸爸的名字</h2>
      <slot  name="fathername"></slot >
    </div>
    <div>
      <h2>媽媽的名字</h2>
      <slot  name="mothername"></slot >
    </div>
  </div>
</template>
<script>
export default {
  name: "children"
};
</script>

父組件:

<template>
  <div>
    <p>使用solt傳值:爸爸媽媽的名字叫什麼</p>
    <div style="color:red;">
      <children>
        <template v-slot:fathername>
          <p>小坦克的爸爸</p>
        </template>
        <template v-slot:mothername>
          <p>小坦克的媽媽</p>
        </template>
      </children>
    </div>
  </div>
</template>
<script>
import children from './zi'
export default {
  components:{
    children
  }
};
</script>

在這裡插入圖片描述
註意:

  1. 父級的填充內容如果指定到子組件的沒有對應名字插槽,那麼該內容不會被填充到預設插槽中。
  2. 如果子組件沒有預設插槽,而父級的填充內容指定到預設插槽中,那麼該內容就“不會”填充到子組件的任何一個插槽中。
  3. 如果子組件有多個預設插槽,而父組件所有指定到預設插槽的填充內容,將“會” “全都”填充到子組件的每個預設插槽中。

作用域插槽

有個描述寫的很好

作用域插槽其實就是帶數據的插槽,即帶參數的插槽,簡單的來說就是子組件提供給父組件的參數,該參數僅限於插槽中使用,父組件可根據子組件傳過來的插槽數據來進行不同的方式展現和填充插槽內容。

例子:簡單點實例,簡單瞭解,明白用法
子組件

<template>
    <div class="card-wrap">  
        <div class="foot">
            <slot name="todo" v-bind:user="user">                 
            </slot>
        </div>
    </div>
</template>
<script>
export default {
    data(){
        return{
             user:{
                 lastname:'qiao',
                 age:12,
                 firstName:'zhang'
             }
        }
    }
}
</script>

父組件:

<Card>
      <template v-slot:todo="slotProps">
           {{slotProps.user.age}}
           {{slotProps.user.lastname}}
       </template>                      
</Card>
 
//slotProps 可以隨意命名
//slotProps 接取的是子組件標簽slot上屬性數據的集合所有v-bind:user="user"

這隻是簡單的應用
在此有一個例子用來顯示
https://www.jianshu.com/p/e10baeff888d
介紹相應的插槽使用
加以理解
有個例子
就是寫商城 你想裡邊不是有很多的 欄目 商品對吧
在我們的初衷肯定是要在寫的時候進行相應的分類的,細化到模塊進行書寫對吧,然後商品列表本來就很多,從伺服器取回數據要進行相應的渲染,肯定要用到迴圈,每個商品的格式都是一樣的啊
在這裡插入圖片描述
步驟:
1.首先我們把一個商品單獨列出來,寫成一個小組件,商品卡片,例如我們新建一個 food.vue
然後呢我們在 商品展示列表 foodlist.vue 裡面進行數據的展示
就是取到數據 寫一個 v-for 迴圈商品卡片顯示

//明白代碼的意思就行
<food  v-for="(item , index) in commodities :fooddata="fooddata" @clickfood="onFoodClick" "></food>

2.在子組件裡面進行數據的上傳到父組件
意思就是food.vue 組件使用點擊事件上傳自己id 可以在父組件裡面進行相應的操作比如跳轉到詳情頁
拓展:
比如上邊的那個圖片 裡面有好幾個相應的欄目,每個裡面都有相應的商品那我們就可以用插槽了是不是 (插槽不就是可以把相應的要展示的東西模板啥的傳進去顯示嗎 這是我看到這個例子的第一反應) 對吧 在整個的首頁上面 把每個欄目抽成組件 來用 在每個組件裡面顯示相應的商品卡片就是插槽
大體邏輯就是這樣 實現 組件和業務的分離
但是具體的細化我沒有認真理解透 有時間再來弄

插槽相應的註意事項及瞭解

1:縮寫 (v-slot:) 替換為字元 #。例如 v-slot:header 可以被重寫為 #header:
2.廢棄的語法 但是還在用 在有的組件庫裡面會有的

//在 <template> 上使用特殊的 slot attribute,可以將內容從父級傳給具名插槽
  <template slot="header">
    <h1>Here might be a page title</h1>
  </template>
 // 或者直接把 slot attribute 用在一個普通元素上:
  <h1 slot="header">Here might be a page title</h1>
//或者有 slot-scope attribute 的作用域插槽
//在 <template> 上使用特殊的 slot-scope attribute,可以接收傳遞給插槽的 prop (把這裡提到過的 <slot-example> 組件作為示例):
<slot-example>
  <template slot="default" slot-scope="slotProps">
    {{ slotProps.msg }}
  </template>
</slot-example>
//這裡的 slot-scope 聲明瞭被接收的 prop 對象會作為 slotProps 變數存在於 <template> 作用域中。你可以像命名 JavaScript 函數參數一樣隨意命名 slotProps。

  

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 打開虛擬機進入linux系統 進入Hadoop目錄下 多用tab鍵 它可以自動補齊命令 1. 啟動Hadoop集群 start-all.sh 等價於 start-dfs.sh 和 start-yarn.sh 2. 關閉Hadoop集群 stop-all.sh 3. 查看啟動的服務進程 jps 4. ...
  • 什麼叫大數據,“大”,說的並不僅是數據的“多”!不能用數據到了多少TB ,多少PB 來說。 對於大數據,可以用四個詞來表示:大量,多樣,實時,不確定。 也就是數據的量龐大,數據的種類繁雜多樣話,數據的變化飛快,數據的真假存疑。 大量:這個大家都知道,想百度,淘寶,騰訊,Facebook,Twitte ...
  • 今天和大家分享一下,iOS開發3-5年應該掌握的技能。 大大小小參加過不下30+公司的面試,其中不乏BAT、TMD等一線互聯網公司,總結一下,發現大廠招聘都有一個共性。 對技術的要求很全面,有些開發者認為iOS掌握了基礎的UI、網路、記憶體、多線程等等就夠了,其實要想更好的應付iOS的面試,這些是遠遠 ...
  • 1.先說現狀 現在國內公司開全新項目,Swift 已經占壓倒性優勢了。 很多以前是 OC 的項目也轉向 OC/Swift 混編了。 但是也有對包大小非常敏感的項目,還是純 OC 開發。不少公司剛剛擺脫 MRC 不久,業務壓力大,歷史包袱重,沒有時間推進新技術。 2. 對比一下 OC 和 Swift ...
  • 下麵說一下我的感受吧 自學web前端8個月,我是怎樣拿下7K薪資的?自學兩個字,說起來很輕鬆,但真正做起來那真是絕非易事,說實話,在我收到HR發來的offer那一刻,眼淚差點掉下來,這個過程中吃的這些苦,真的只有自己才能知道,在自學的時候經常會碰到一些技術方面的問題,找不到老師教,只能去群里哪裡找大 ...
  • 結合個人經歷總結的前端入門方法,總結從零基礎到具備前基本技能的道路,學習方法,資料,由於能力有限,不能保證面面俱到,知識作為入門參考,面向初學者,讓初學者少走彎路。 互聯網的快速發展和激烈競爭,用戶體驗成為一個重要的關註點,導致專業前端工程師成為熱門職業,各大公司對前端工程師的需求量都很大,要求也越 ...
  • HTML+CSS+JS模仿win10亮度調節效果 代碼 <!doctype html> <html> <head> <meta charset="utf-8"> <title>模仿win10的亮度調節</title> <style> .control_bar{ height:200px; width ...
  • 項目要求是:html生成圖片(圖片格式不限),長按圖片能夠保存到本地,主要在移動端 1、初試html2canvas 最初選擇的是html2canvas插件,將html轉為canvas 再通過Canvas2Image,將canvas轉為想要的圖片 問題:只能截取一屏的內容,當出現滾動條時,不在滾動視區 ...
一周排行
    -Advertisement-
    Play Games
  • 示例項目結構 在 Visual Studio 中創建一個 WinForms 應用程式後,項目結構如下所示: MyWinFormsApp/ │ ├───Properties/ │ └───Settings.settings │ ├───bin/ │ ├───Debug/ │ └───Release/ ...
  • [STAThread] 特性用於需要與 COM 組件交互的應用程式,尤其是依賴單線程模型(如 Windows Forms 應用程式)的組件。在 STA 模式下,線程擁有自己的消息迴圈,這對於處理用戶界面和某些 COM 組件是必要的。 [STAThread] static void Main(stri ...
  • 在WinForm中使用全局異常捕獲處理 在WinForm應用程式中,全局異常捕獲是確保程式穩定性的關鍵。通過在Program類的Main方法中設置全局異常處理,可以有效地捕獲並處理未預見的異常,從而避免程式崩潰。 註冊全局異常事件 [STAThread] static void Main() { / ...
  • 前言 給大家推薦一款開源的 Winform 控制項庫,可以幫助我們開發更加美觀、漂亮的 WinForm 界面。 項目介紹 SunnyUI.NET 是一個基於 .NET Framework 4.0+、.NET 6、.NET 7 和 .NET 8 的 WinForm 開源控制項庫,同時也提供了工具類庫、擴展 ...
  • 說明 該文章是屬於OverallAuth2.0系列文章,每周更新一篇該系列文章(從0到1完成系統開發)。 該系統文章,我會儘量說的非常詳細,做到不管新手、老手都能看懂。 說明:OverallAuth2.0 是一個簡單、易懂、功能強大的許可權+可視化流程管理系統。 有興趣的朋友,請關註我吧(*^▽^*) ...
  • 一、下載安裝 1.下載git 必須先下載並安裝git,再TortoiseGit下載安裝 git安裝參考教程:https://blog.csdn.net/mukes/article/details/115693833 2.TortoiseGit下載與安裝 TortoiseGit,Git客戶端,32/6 ...
  • 前言 在項目開發過程中,理解數據結構和演算法如同掌握蓋房子的秘訣。演算法不僅能幫助我們編寫高效、優質的代碼,還能解決項目中遇到的各種難題。 給大家推薦一個支持C#的開源免費、新手友好的數據結構與演算法入門教程:Hello演算法。 項目介紹 《Hello Algo》是一本開源免費、新手友好的數據結構與演算法入門 ...
  • 1.生成單個Proto.bat內容 @rem Copyright 2016, Google Inc. @rem All rights reserved. @rem @rem Redistribution and use in source and binary forms, with or with ...
  • 一:背景 1. 講故事 前段時間有位朋友找到我,說他的窗體程式在客戶這邊出現了卡死,讓我幫忙看下怎麼回事?dump也生成了,既然有dump了那就上 windbg 分析吧。 二:WinDbg 分析 1. 為什麼會卡死 窗體程式的卡死,入口門檻很低,後續往下分析就不一定了,不管怎麼說先用 !clrsta ...
  • 前言 人工智慧時代,人臉識別技術已成為安全驗證、身份識別和用戶交互的關鍵工具。 給大家推薦一款.NET 開源提供了強大的人臉識別 API,工具不僅易於集成,還具備高效處理能力。 本文將介紹一款如何利用這些API,為我們的項目添加智能識別的亮點。 項目介紹 GitHub 上擁有 1.2k 星標的 C# ...