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>
相关推荐
刘 怼怼3 分钟前
使用 Vue 重构 RAGFlow 实现聊天功能
前端·vue.js·人工智能·重构
Json_16 分钟前
Vue v-bind指令
前端·vue.js·深度学习
Json_21 分钟前
Vue 自定义指令
前端·vue.js·深度学习
Ariel_提拉米苏22 分钟前
表格数据导出为Excel
前端·javascript·vue.js·excel
靠近彗星1 小时前
基于 Vue + Django + MySQL 实现个人博客/CMS系统
前端·vue.js·python·mysql·django
青青河边草2 小时前
从Vue.js的角度探索高效渲染策略
vue.js
wangpq2 小时前
微信小程序中封装天爱验证码
前端·vue.js
Jelian_2 小时前
单点登录(SSO)实战:基于Vue与Spring Boot的深度实现
前端·vue.js·spring boot
巴巴博一2 小时前
Vue Transition组件类名+TailwindCSS
前端·javascript·vue.js
北极糊的狐2 小时前
若依项目通用套路——列表页面提前加载数据塞进下拉框待选项
javascript·vue.js·elementui