菜单
×
   ❮   
HTML CSS JAVASCRIPT SQL PYTHON JAVA PHP HOW TO W3.CSS C C++ C# BOOTSTRAP REACT MYSQL JQUERY EXCEL XML DJANGO NUMPY PANDAS NODEJS R TYPESCRIPT ANGULAR GIT POSTGRESQL MONGODB ASP AI GO KOTLIN SASS VUE DSA GEN AI SCIPY AWS CYBERSECURITY DATA SCIENCE
     ❯   

Vue 教程

Vue 首页 Vue Intro Vue Directives Vue v-bind Vue v-if Vue v-show Vue v-for Vue Events Vue v-on Vue Methods Vue Event Modifiers Vue Forms Vue v-model Vue CSS Binding Vue Computed Properties Vue Watchers Vue Templates

Scaling Up

Vue 为什么、如何以及设置 Vue 第一个 SFC 页面 Vue 组件 Vue Props Vue v-for 组件 Vue $emit() Vue Fallthrough Attributes Vue Scoped Styling Vue 本地组件 Vue Slots Vue v-slot Vue Scoped Slots Vue 动态组件 Vue Teleport Vue HTTP 请求 Vue Template Refs Vue Lifecycle Hooks Vue Provide/Inject Vue Routing Vue Form Inputs Vue Animations Vue Animations with v-for Vue Build Vue Composition API

Vue Reference

Vue Built-in Attributes Vue Built-in Components Vue Built-in Elements Vue Component Instance Vue Directives Vue Instance Options Vue Lifecycle Hooks

Vue 示例

Vue Examples Vue Exercises Vue Quiz Vue Server Vue Certificate

Vue 插槽

插槽是 Vue 中一个强大的功能,它允许更灵活和可重用的组件。

我们使用 Vue 中的插槽将父组件的内容发送到子组件的 <template> 中。

插槽

到目前为止,我们只在 <template> 中将组件用作自闭合标签,例如:

App.vue:

<template>
  <slot-comp />
</template>

相反,我们可以使用开闭标签,并在其中放置一些内容,例如一段文本:

App.vue:

<template>
  <slot-comp>Hello World!</slot-comp>
</template>

但要接收 'Hello World!' 并将其显示在我们的页面上,我们需要在组件中使用 <slot> 标签。<slot> 标签充当内容的占位符,因此在应用程序构建后,<slot> 将被发送给它的内容替换。

示例

SlotComp.vue:

<template>
  <div>  
    <p>SlotComp.vue</p>
    <slot></slot>
  </div>
</template>
运行示例 »

插槽作为卡片

插槽也可用于包装大块的动态 HTML 内容,以获得卡片式外观。

之前我们通过 props 发送数据来创建组件内部的内容,现在我们可以直接将 HTML 内容作为内容发送到 <slot> 标签中。

示例

App.vue:

<template>
  <h3>Slots in Vue</h3>  
  <p>We create card-like div boxes from the foods array.</p>
  <div id="wrapper">
    <slot-comp v-for="x in foods">
      <img v-bind:src="x.url">
      <h4>{{x.name}}</h4>
      <p>{{x.desc}}</p>
    </slot-comp>
  </div>
</template>

当内容进入带有 <slot> 的组件时,我们在 <slot> 周围使用 div 并本地化样式化 <div>,以在内容周围创建卡片式外观,而不会影响我们应用程序中的其他 div。

SlotComp.vue:

<template>
  <div> <!-- This div makes the card-like appearance -->
    <slot></slot>
  </div>
</template>

<script></script>

<style scoped>
  div {
    box-shadow: 0 4px 8px 0 rgba(0,0,0,0.2);
    border-radius: 10px;
    margin: 10px;
  }
</style>
运行示例 »

可以重用生成卡片式框架内容的组件来创建不同的元素,但它们都带有相同的卡片式框架。

在这个例子中,我们使用与食物项相同的组件来创建一个页脚。

示例

App.vue:

<template>
  <h3>Reusable Slot Cards</h3>
  <p>We create card-like div boxes from the foods array.</p>
  <p>We also create a card-like footer by reusing the same component.</p>
  <div id="wrapper">
    <slot-comp v-for="x in foods">
      <img v-bind:src="x.url">
      <h4>{{x.name}}</h4>
    </slot-comp>
  </div>
  <footer>
    <slot-comp>
      <h4>Footer</h4>
    </slot-comp>
  </footer>
</template>
运行示例 »

备用内容

如果没有为组件提供内容,我们可以在 <slot> 中设置备用内容。

示例

此应用程序中的第一个组件没有提供内容,因此会渲染备用内容。

App.vue:

<template>
  <h3>Slots Fallback Content</h3>
  <p>A component without content provided can have fallback content in the slot tag.</p>
  <slot-comp>
    <!-- Empty -->
  </slot-comp>
  <slot-comp>
    <h4>This content is provided from App.vue</h4>
  </slot-comp>
</template>

SlotComp.vue:

<template>
  <div>
    <slot>
      <h4>This is fallback content</h4>
    </slot>
  </div>
</template>
运行示例 »

Vue 练习

通过练习来测试自己

练习

当组件的开始标签和结束标签之间提供了文本,例如:

<comp-one>Hello World!</comp-one>

提供的文本可以使用插槽在组件中接收,如下所示:

<template>
  <div>  
    <p>CompOne.vue</p>
    
  </div>
</template>

开始练习



×

联系销售

如果您想将 W3Schools 服务用于教育机构、团队或企业,请发送电子邮件给我们
sales@w3schools.com

报告错误

如果您想报告错误,或想提出建议,请发送电子邮件给我们
help@w3schools.com

W3Schools 经过优化,旨在方便学习和培训。示例可能经过简化,以提高阅读和学习体验。教程、参考资料和示例会不断审查,以避免错误,但我们无法保证所有内容的完全正确性。使用 W3Schools 即表示您已阅读并接受我们的使用条款Cookie 和隐私政策

版权所有 1999-2024 Refsnes Data。保留所有权利。W3Schools 由 W3.CSS 提供支持