vue2 封装插槽组件

安装 element-ui

npm install element-ui --save ---force

main.js 导入

import Vue from 'vue';

import ElementUI from 'element-ui';

import 'element-ui/lib/theme-chalk/index.css';

import App from './App.vue';

Vue.use(ElementUI);

new Vue({ el: '#app', render: h => h(App) });

创建一个插槽组件

  • 具名插槽 (Named Slots) :允许你在组件中定义多个插槽,并为它们命名。在上面的示例中,header 是一个具名插槽。

  • 默认插槽 (Default Slot):如果没有提供具名插槽,插入的内容会放入默认插槽。

    <template>
    <slot name="header"></slot>
    <slot></slot>
    </template> <script> export default { name: 'BaseCard' } </script> <style scoped> .card { border: 1px solid #ddd; border-radius: 4px; padding: 16px; } .card-header { font-size: 1.25em; margin-bottom: 10px; } .card-body { font-size: 1em; } </style>

使用插槽组件

复制代码
<!-- App.vue -->
<template>
  <div>
    <BaseCard>
      <template v-slot:header>
        <h2>Card Title</h2>
      </template>
      <p>This is the card content.</p>
    </BaseCard>
  </div>
</template>

<script>
import BaseCard from './components/BaseCard.vue'

export default {
  name: 'App',
  components: {
    BaseCard
  }
}
</script>

作用域插槽:

组件:

复制代码
<!-- BaseCard.vue -->
<template>
  <div class="card">
    <div class="card-header">
      <slot name="header" :title="headerTitle"></slot>
    </div>
    <div class="card-body">
      <slot></slot>
    </div>
  </div>
</template>

<script>
export default {
  name: 'BaseCard',
  data() {
    return {
      headerTitle: 'Default Title'
    }
  }
}
</script>

使用:

复制代码
<!-- ParentComponent.vue -->
<template>
  <div>
    <BaseCard>
      <template v-slot:header="slotProps">
        <h2>{{ slotProps.title }}</h2>
      </template>
      <p>This is the card content.</p>
    </BaseCard>
  </div>
</template>

<script>
import BaseCard from './components/BaseCard.vue'

export default {
  name: 'ParentComponent',
  components: {
    BaseCard
  }
}
</script>
相关推荐
202628 分钟前
14.7 企业级脚手架-制品仓库发布使用
前端·vue.js
用户841794814562 小时前
vue table 甘特图 vxe-gantt 实现多个表格的任务互相拖拽数据
vue.js
程序员张32 小时前
Vue3+ElementPlus—高效存储和回显多选项的状态值
javascript·vue.js·前端框架
一大树3 小时前
Vue3 自定义 Hook 实战指南:从原理到开箱即用的 Hook 推荐
vue.js
白菜豆腐花3 小时前
vue3实现防抖hook
前端·vue.js
秋天的一阵风3 小时前
前端截图方案实战:snapdom 与 html2canvas 的深度对比
前端·javascript·vue.js
前端小巷子4 小时前
watch 与 computed:Vue3响应式的抉择
前端·vue.js·面试
用户6120414922134 小时前
springboot+vue3做的图书管理与借阅系统
vue.js·spring boot·后端
计算机学姐13 小时前
基于SpringBoot的社团管理系统【2026最新】
java·vue.js·spring boot·后端·mysql·spring·mybatis
前端开发爱好者14 小时前
弃用 ESLint + Prettier!快 35 倍的 AI 格式化神器!
前端·javascript·vue.js