搜尋
首頁web前端js教程Vue.js中使用插槽將資料從父元件傳遞到子元件

Vue.js中使用插槽將資料從父元件傳遞到子元件

Sep 19, 2020 am 11:08 AM
vue.jsvue插槽組件通信

這篇文章要為大家介紹如何使用Vue插槽在Vue.js中將資料從父元件傳遞到子元件。有一定的參考價值,有需要的朋友可以參考一下,希望對大家有幫助。

Vue.js中使用插槽將資料從父元件傳遞到子元件

這篇文章適合所有階段的開發人員(包括初學者)。

在你開始之前

您的電腦上將需要以下內容:

  • 已安裝Node.js版本10.x及更高版本。您可以透過在終端機/命令提示字元中執行以下命令來驗證版本:node -v

  • #程式碼編輯器;推薦Visual Studio Code

  • Vue的最新版本,已全域安裝在您的電腦上

  • #您的電腦上已安裝Vue CLI 3.0。為此,請先卸載舊的CLI版本:

npm uninstall -g vue-cli

然後,安裝新的:

npm install -g @ vue / cli
  • 在此處下載 Vue入門專案

  • 解壓縮下載的專案

  • #導航到解壓縮的檔案並執行命令以保持所有依賴項最新:

npm install

什麼是Vue插槽?

Vue插槽是由Vue團隊創建的Vue模板元素,旨在為模板內容分發提供平台。它是受Web元件規範草案啟發的內容分發API的實作。使用Vue插槽,您可以在專案中的各個元件之間傳遞或分發HTML程式碼。

為什麼Vue插槽很重要?

內容分佈很重要,原因有很多,其中一些與結構有關。使用vue插槽,可以建構一個html介面(類似於typescript),然後可以將其用作透過模板注入建置元件的指南。它是一個非常可伸縮和高效的解決方案,可以將模板程式碼從一個元件傳遞到另一個元件。

內容定位是Vue插槽的另一個很好的用例。您只需建立一個模板,然後使用另一個元件或父元件按照您希望模板顯示在使用者介面中的方式排列該模板。

插槽與道具

如果您了解Vue插槽,您可能會想知道道具和插槽是否做同樣的事情。好了,這些工具或平台的中心思想是鼓勵資源的可重複使用性和效率。考慮到這一點,插槽和道具是相似的。

props處理在元件之間傳遞資料對象,而slot則處理在元件之間傳遞模板(html)內容。但是,作用域插槽的行為與道具完全一樣;這將在本教程中清楚地說明。

Vue插槽語法

對於插槽,您的子元件可作為您希望如何安排內容的介面或結構。可能是這樣的:

<template>
  <div>
    <slot></slot>
  </div>
</template>

父元件(要注入子元件的HTML內容所在的地方)可以如下所示:

<Test>
   <h2 id="Hello-nbsp-World">Hello World!</h2>
 </Test>

此組合將傳回如下所示的使用者介面:

<template>
  <div>
    <h2 id="Hello-nbsp-World">Hello World!</h2>
  </div>
</template>

請注意,它本身的插槽是如何作為內容注入位置和方式的指南的——這是中心思想。

示範

如果您從一開始就關注這篇文章,那麼您將在vs程式碼中開啟vue starter專案.為了示範語法部分中的簡單範例,我們的父元件將是app.vue檔案。打開app.vue檔案並在此程式碼區塊中複製:

<template>
  <div id="app">
    <img src="/static/imghwm/default1.png"  data-src="./assets/logo.png"  class="lazy"  alt="Vue logo" >
    <Test>
      <h2 id="Hello-nbsp-World">Hello World!</h2>
    </Test>
  </div>
</template>
<script>
import Test from &#39;./components/Test.vue&#39;
export default {
  name: &#39;app&#39;,
  components: {
    Test
  }
}
</script>

子元件將成為測試元件,因此請在test.vue檔案中複製下面的程式碼區塊:

<template>
  <div>
    <slot></slot>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;
}
</script>

使用以下命令在開發環境中執行應用程式:

npm run serve

##命名插槽

Vue允許一個組件有多個插槽,這意味著您可以擁有任意數量的插槽。要測試此功能,請將此新程式碼區塊複製到

test.vue檔案中:

<template>
  <div>
    <slot></slot>
    <slot></slot>
    <slot></slot>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;
}
</script>

如果運行應用程序,可以看到

hello world已列印了三次。因此,如果您想要添加更多的內容(例如,一個標題、一個帶有文字的段落,然後是一個無序的清單),vue允許我們命名作用域,以便它可以標識要顯示的特定作用域。在test.vue檔案中命名插槽如下:

<template>
  <div>
    <slot name="header"></slot>
    <slot name="paragraph"></slot>
    <slot name="links"></slot>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;
}
</script>

現在,也必須根據要在其中顯示HTML元素的槽名來標記這些HTML元素。將此複製到

app.vue檔案的範本部分:

<template>
  <div id="app">
    <img src="/static/imghwm/default1.png"  data-src="./assets/logo.png"  class="lazy"  alt="Vue logo" >
    <Test>
      <h2 id="Hello-nbsp-world">Hello world!</h2>
      <p slot="paragraph">Hello, I am a paragraph text</p>
      <ul slot="links">
        <li>Hello, I am a list item</li>
        <li>Hello, I am a list item</li>
      </ul>
    </Test>
  </div>
</template>

#v-castle語法

當VUE版本2.6發佈時,它附帶了一個更好的語法來引用名為

v-slot的子元件中的插槽名稱,這意味著要替換初始的插槽語法。因此,與其使用這樣的槽來取代父元件模板:

<Test>
   <h1 id="Hello-nbsp-world">Hello world!</h1>
</Test>

從3.0版開始,它現在將如下所示:

<Test v-slot:header>
   <h1 id="Hello-nbsp-world">Hello world!</h1>
</Test>

注意,除了字符串从slotv-slot的细微变化外,还有一个重大变化:v-slot只能在模板上定义,而不能在任何html元素上定义。这是一个很大的变化,因为它质疑命名插槽的可用性,但截至本文撰写之时,插槽仍然是文档的很大一部分。

作用域插槽

设想一个场景,其中Vue插槽还可以从父组件访问子组件中的数据对象,这是一种具有道具功能的插槽。要说明这一点,请继续,通过将下面的代码块复制到test.vue文件中,在子组件中创建一个数据对象:

<template>
  <div>
    <slot v-bind:team="team"></slot>
    <slot name="paragraph"></slot>
    <slot name="links"></slot>
  </div>
</template>
<script>
export default {
  name: &#39;Test&#39;,
  data(){
    return{
      team:"FC Barcelona"
    }
  }
}
</script>

与普通props一样,v-bind指令用于将数据中的团队与父组件中的prop引用绑定。打开app.vue文件并将下面的代码块复制到模板部分:

<template>
  <div id="app">
    <img src="/static/imghwm/default1.png"  data-src="./assets/logo.png"  class="lazy"  alt="Vue logo" >
    <Test v-slot="{team}">
      <h2 id="Hello-nbsp-world-nbsp-my-nbsp-team-nbsp-is-nbsp-team">Hello world! my team is {{team}}</h2>
    </Test>
  </div>
</template>

如果运行应用程序,您将看到数据对象已成功传递到父组件。

结论

本文向您介绍了vue.js中的插槽,以及它们对内容注入的重要性。您看到了如何设置它,甚至看到了如何为一个组件设置多个插槽。你还看到了狭槽如何通过作用域来充当道具。

英文原文地址:https://blog.logrocket.com/how-to-pass-html-content-through-components-with-vue-slots/

相关推荐:

2020年前端vue面试题大汇总(附答案)

vue教程推荐:2020最新的5个vue.js视频教程精选

更多编程相关知识,请访问:编程入门!!

以上是Vue.js中使用插槽將資料從父元件傳遞到子元件的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文轉載於:logrocket。如有侵權,請聯絡admin@php.cn刪除
JavaScript引擎:比較實施JavaScript引擎:比較實施Apr 13, 2025 am 12:05 AM

不同JavaScript引擎在解析和執行JavaScript代碼時,效果會有所不同,因為每個引擎的實現原理和優化策略各有差異。 1.詞法分析:將源碼轉換為詞法單元。 2.語法分析:生成抽象語法樹。 3.優化和編譯:通過JIT編譯器生成機器碼。 4.執行:運行機器碼。 V8引擎通過即時編譯和隱藏類優化,SpiderMonkey使用類型推斷系統,導致在相同代碼上的性能表現不同。

超越瀏覽器:現實世界中的JavaScript超越瀏覽器:現實世界中的JavaScriptApr 12, 2025 am 12:06 AM

JavaScript在現實世界中的應用包括服務器端編程、移動應用開發和物聯網控制:1.通過Node.js實現服務器端編程,適用於高並發請求處理。 2.通過ReactNative進行移動應用開發,支持跨平台部署。 3.通過Johnny-Five庫用於物聯網設備控制,適用於硬件交互。

使用Next.js(後端集成)構建多租戶SaaS應用程序使用Next.js(後端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:23 AM

我使用您的日常技術工具構建了功能性的多租戶SaaS應用程序(一個Edtech應用程序),您可以做同樣的事情。 首先,什麼是多租戶SaaS應用程序? 多租戶SaaS應用程序可讓您從唱歌中為多個客戶提供服務

如何使用Next.js(前端集成)構建多租戶SaaS應用程序如何使用Next.js(前端集成)構建多租戶SaaS應用程序Apr 11, 2025 am 08:22 AM

本文展示了與許可證確保的後端的前端集成,並使用Next.js構建功能性Edtech SaaS應用程序。 前端獲取用戶權限以控制UI的可見性並確保API要求遵守角色庫

JavaScript:探索網絡語言的多功能性JavaScript:探索網絡語言的多功能性Apr 11, 2025 am 12:01 AM

JavaScript是現代Web開發的核心語言,因其多樣性和靈活性而廣泛應用。 1)前端開發:通過DOM操作和現代框架(如React、Vue.js、Angular)構建動態網頁和單頁面應用。 2)服務器端開發:Node.js利用非阻塞I/O模型處理高並發和實時應用。 3)移動和桌面應用開發:通過ReactNative和Electron實現跨平台開發,提高開發效率。

JavaScript的演變:當前的趨勢和未來前景JavaScript的演變:當前的趨勢和未來前景Apr 10, 2025 am 09:33 AM

JavaScript的最新趨勢包括TypeScript的崛起、現代框架和庫的流行以及WebAssembly的應用。未來前景涵蓋更強大的類型系統、服務器端JavaScript的發展、人工智能和機器學習的擴展以及物聯網和邊緣計算的潛力。

神秘的JavaScript:它的作用以及為什麼重要神秘的JavaScript:它的作用以及為什麼重要Apr 09, 2025 am 12:07 AM

JavaScript是現代Web開發的基石,它的主要功能包括事件驅動編程、動態內容生成和異步編程。 1)事件驅動編程允許網頁根據用戶操作動態變化。 2)動態內容生成使得頁面內容可以根據條件調整。 3)異步編程確保用戶界面不被阻塞。 JavaScript廣泛應用於網頁交互、單頁面應用和服務器端開發,極大地提升了用戶體驗和跨平台開發的靈活性。

Python還是JavaScript更好?Python還是JavaScript更好?Apr 06, 2025 am 12:14 AM

Python更适合数据科学和机器学习,JavaScript更适合前端和全栈开发。1.Python以简洁语法和丰富库生态著称,适用于数据分析和Web开发。2.JavaScript是前端开发核心,Node.js支持服务器端编程,适用于全栈开发。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前By尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
3 週前By尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
4 週前By尊渡假赌尊渡假赌尊渡假赌

熱工具

mPDF

mPDF

mPDF是一個PHP庫,可以從UTF-8編碼的HTML產生PDF檔案。原作者Ian Back編寫mPDF以從他的網站上「即時」輸出PDF文件,並處理不同的語言。與原始腳本如HTML2FPDF相比,它的速度較慢,並且在使用Unicode字體時產生的檔案較大,但支援CSS樣式等,並進行了大量增強。支援幾乎所有語言,包括RTL(阿拉伯語和希伯來語)和CJK(中日韓)。支援嵌套的區塊級元素(如P、DIV),

SecLists

SecLists

SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

EditPlus 中文破解版

EditPlus 中文破解版

體積小,語法高亮,不支援程式碼提示功能

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具