当前位置: 首页 > news >正文

vue组件二次封装

vue演练场:Vue SFC Playground

有组件如下:

它接受

  1. props:msg
  2. 命名插槽 header
  3. 作用域插槽
<script setup>
const greetingMessage = 'hello'
const props=defineProps({
	msg:{
		type:String,
		default:"默认msg props"
	}
})
</script>

<template>
  <div>
		<h1>{{msg}}</h1>
  	<slot :text="greetingMessage" :count="1"></slot>
		<div style="border:1px solid red">
		<slot name="header">默认header</slot>
		</div>
	</div>
</template>

直接使用

<script setup>
import MyComponent from './MyComponent.vue'
import Comp2 from './Comp2.vue';
</script>

<template>
	<MyComponent v-slot="slotProps">
  	{{ slotProps.text }} {{ slotProps.count }}
  </MyComponent>

	
	</Comp2>
		

</template>

二次封装组件

对原来的MyComponent再封装一次

强烈二次封装使用export default方式的鞋,不要用setup,会多好多声明代码

<script>
import MyComponent from './MyComponent.vue';
export default {
  components:{MyComponent}
}
</script>

<template>
  <MyComponent v-bind="$attrs">
    <template v-for="(item,name) in $slots" #[name]="slotData">
      <slot :name="name" v-bind="slotData"></slot>
    </template>
  </MyComponent>
</template>

二次封装的组件的使用

<script setup>
import MyComponent from './MyComponent.vue'
import Comp2 from './Comp2.vue';
</script>

<template>
	<MyComponent v-slot="slotProps">
  	{{ slotProps.text }} {{ slotProps.count }}
  </MyComponent>
	<div style="height:200px"></div>
	<Comp2 />
	
		<div style="height:200px">下面是传递了参数和slot的</div>
	<Comp2 >
		<template v-slot:header>
			我是自定义头内容
		</template>
		<!-- 自定义作用域插槽 -->
		<template v-slot:default="slotProps">
				<div>default变了{{ slotProps.text }} {{ slotProps.count }}</div>
		</template>
		<template v-slot:head="slotProps">
				<div>头变了:{{ slotProps.text }} {{ slotProps.count }}</div>
		</template>
	
	</Comp2>
		

</template>

相关文章:

  • 关于redis的主从复制(下)
  • 【深度学习在图像配准中的应用与挑战】
  • 详细介绍Tess4J的使用:从PDF到图像的OCR技术实现
  • Nacos Derby 远程命令执行漏洞修复建议
  • DeepSeek学习资料
  • 强化学习-价值学习算法
  • 电路元器件知识:稳压二极管
  • 开题报告——基于Spring Boot的社区居民健康管理平台的设计与实现
  • NPM环境搭建指南
  • 在 Ubuntu 22.04 中修改主机名称(hostname)
  • C++基础知识学习记录—模版和泛型编程
  • Three.js 快速入门教程【一】开启你的 3D Web 开发之旅
  • Redis_基础
  • C语言(结构体)
  • unity学习47:寻路和导航,unity2022后版本如何使用 Navmesh 和 bake
  • Java基础——代理模式
  • 【优先级队列】任务分配
  • sentinel集成nacos做持久化配置
  • rk3576上部署deepseek
  • systemverilog刷题小记
  • 贵州省总工会正厅级副主席梁伟被查,曾任贵州省纪委副书记
  • 巴基斯坦外长:印巴已同意立即停火
  • 国家统计局:4月份居民消费价格同比下降0.1%
  • 李在明正式登记参选下届韩国总统
  • 市自规局公告收回新校区建设用地,宿迁学院:需变更建设主体
  • 近4小时会谈、3项联合声明、20多份双边合作文本,中俄元首今年首次面对面会晤成果颇丰