Vue学习笔记-插槽

插槽

  1. 作用:让父组件可以向子组件的指定位置插入html结构,也是一种组件间的通信方式,适用于父组件===>子组件

  2. 分类:默认插槽、具名插槽、作用域插槽

  3. 使用方式:

    1. 默认插槽
    父组件:
    <Category>
    	<div>插入的html结构</div>
    </Category>
    
    子组件:
    <template>
    	<div>
    		<!--定义插槽的位置-->
    		<slot>此处可写一些默认的html内容,但以后会被父组件中插入的html结构替换</slot>
    	</div>
    </template>
    
    1. 具名插槽
    父组件:
    <Category>
    	<template slot="center">
    		<div>插入的html结构1</div>
    	</template>
    	<template v-slot:footer>
    		<div>插入的html结构2</div>
    	</template>
    </Category>
    
    子组件:
    <template>
    	<div>
    		<!--定义插槽-->
    		<slot name="center">默认插槽内容...</slot>
    		<slot name="footer">默认插槽内容...</slot>
    	</div>
    </template>
    
    1. 作用域插槽
      1. 理解:数据在子组件中,但数据的生成结构需要组件的使用者来决定(父组件)
      2. 具体编码
      父组件:
      <Category>
      	<template scope="scopeData">
      		<!--生成的是ul列表-->
      		<ul>
      			<li v-for="(g,index) in scopeData.games" :key="index">{{g}}</li>
      		</ul>
      	</template>
      </Category>
      <Category>
      	<template>
      		<!--生成的是h4标签-->
      		<h4 v-for="(g,index) in scopeData.games" :key="index">{{g}}</h4>
      	</template>
      </Category>
      
      子组件:
      <template>
      	<div>
      		<slot :games="games"></slot>
      	</div>
      </template>
      
      <script>
      	export default{
      		name:'Category',
      		data(){
      			return{
      				games:['DNF','LOL','CF','CS_Online']
      			}
      		}
      	}
      </script>
      
好的,我知道你想问什么。首先,我们需要创建一个 Tabs 组件,并且在组件中使用 v-for 循环来渲染标签页。以下是一个简单的示例代码: ```html <template> <div class="tabs"> <div class="tab" v-for="(tab, index) in tabs" :key="index" :class="{ 'active': activeTab === index }" @click="activeTab = index"> {{ tab.label }} </div> <div class="tab-content"> <slot :name="tabs[activeTab].label"></slot> </div> </div> </template> <script> export default { name: 'Tabs', data() { return { activeTab: 0, tabs: [ { label: 'Tab 1' }, { label: 'Tab 2' }, { label: 'Tab 3' } ] } } } </script> <style> .tabs { display: flex; flex-direction: column; } .tab { cursor: pointer; padding: 10px; border: 1px solid #ccc; border-bottom: none; } .tab.active { background-color: #ccc; } .tab-content { border: 1px solid #ccc; padding: 10px; } </style> ``` 在上面的示例中,我们使用了一个名为 tabs 的数组来存储每个标签页的信息。我们使用 v-for 循环来渲染每个标签页的标签,并且使用 activeTab 变量来追踪当前选中的标签页。当用户单击标签页时,我们将更新 activeTab 变量,并使用插槽来渲染相应的标签页内容。 如果你想根据不同的标签页来显示不同的表格内容,你可以在插槽中使用 v-if 或者 v-show 来判断应该显示哪个表格。例如: ```html <template> <div class="tabs"> <div class="tab" v-for="(tab, index) in tabs" :key="index" :class="{ 'active': activeTab === index }" @click="activeTab = index"> {{ tab.label }} </div> <div class="tab-content"> <table v-if="tabs[activeTab].label === 'Tab 1'"> <!-- 表格 1 的内容 --> </table> <table v-else-if="tabs[activeTab].label === 'Tab 2'"> <!-- 表格 2 的内容 --> </table> <table v-else-if="tabs[activeTab].label === 'Tab 3'"> <!-- 表格 3 的内容 --> </table> </div> </div> </template> ``` 在上面的示例中,我们使用了 v-if 和 v-else-if 来判断当前选中的标签页是哪个,并根据不同的标签页显示不同的表格内容。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值