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

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

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

這篇文章要為大家介紹如何使用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>Hello World!</h2>
 </Test>
登入後複製

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

<template>
  <div>
    <h2>Hello World!</h2>
  </div>
</template>
登入後複製

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

示範

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

<template>
  <div id="app">
    <img alt="Vue logo" src="./assets/logo.png">
    <Test>
      <h2>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 alt="Vue logo" src="./assets/logo.png">
    <Test>
      <h2 slot="header">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 slot="header">Hello world!</h1>
</Test>
登入後複製

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

<Test v-slot:header>
   <h1>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 alt="Vue logo" src="./assets/logo.png">
    <Test v-slot="{team}">
      <h2>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中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

深入探討vite是怎麼解析.env檔的 深入探討vite是怎麼解析.env檔的 Jan 24, 2023 am 05:30 AM

使用vue框架開發前端專案時,我們部署的時候都會部署多套環境,往往開發、測試以及線上環境呼叫的介面網域都是不一樣的。如何能做到區分呢?那就是使用環境變數和模式。

圖文詳解如何在Vue專案中整合Ace程式碼編輯器 圖文詳解如何在Vue專案中整合Ace程式碼編輯器 Apr 24, 2023 am 10:52 AM

Ace 是一個用 JavaScript 寫的可嵌入程式碼編輯器。它與 Sublime、Vim 和 TextMate 等原生編輯器的功能和效能相符。它可以很容易地嵌入到任何網頁和 JavaScript 應用程式中。 Ace 被維護為Cloud9 IDE的主要編輯器 ,並且是 Mozilla Skywriter (Bespin) 專案的繼承者。

探討如何在Vue3中撰寫單元測試 探討如何在Vue3中撰寫單元測試 Apr 25, 2023 pm 07:41 PM

在當今前端開發中,Vue.js 已經成為了一個非常流行的框架。隨著 Vue.js 的不斷發展,單元測試變得越來越重要。今天,我們將探討如何在 Vue.js 3 中編寫單元測試,並提供一些最佳實踐和常見的問題及解決方案。

深入聊聊vue3中的reactive() 深入聊聊vue3中的reactive() Jan 06, 2023 pm 09:21 PM

前言:在vue3的開發中,reactive是提供實現響應式資料的方法。日常開發這個是使用頻率很高的api。這篇文章筆者就來探索其內部運作機制。

Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Vue中JSX語法和模板語法的簡單比較(優劣勢分析) Mar 23, 2023 pm 07:53 PM

在Vue.js中,開發人員可以使用兩種不同的語法來建立使用者介面:JSX語法和範本語法。這兩種文法各有優劣,以下就來探討它們的差異和優劣勢。

淺析vue怎麼實現檔案切片上傳 淺析vue怎麼實現檔案切片上傳 Mar 24, 2023 pm 07:40 PM

在實際開發專案過程中有時候需要上傳比較大的文件,然後呢,上傳的時候相對來說就會慢一些,so,後台可能會要求前端進行文件切片上傳,很簡單哈,就是把比如說1個G的檔案流切割成若干個小的檔案流,然後分別請求介面傳遞這個小的檔案流。

解析Vue2實作composition API的原理 解析Vue2實作composition API的原理 Jan 13, 2023 am 08:30 AM

自從Vue3 發布之後,composition API 這個詞走入寫Vue 同學的視野之中,相信大家也一直聽到composition API 比之前的options API 有多好多強,如今由於@vue/composition-api 插件的發布,Vue2的同學也可以上車咯,接下來我們主要以響應式的ref 和reactive 來深入分析一下,這個插件是怎麼實現此

聊聊vue3怎麼使用高德地圖api 聊聊vue3怎麼使用高德地圖api Mar 09, 2023 pm 07:22 PM

在我們使用高德地圖的時候,官方給我們推薦了很多案例,demo,但是這些案例都是使用原生方法接入,並沒有提供vue或者react 的demo,vue2的接入網上也很多人都有寫過,以下這篇文章就來看看vue3怎麼使用常用的高德地圖api,希望對大家有幫助!

See all articles