关于vue 的slot分发内容 (多个分发)

 更新时间:2022年03月29日 16:58:03   作者:黑色咖啡 Ken  
这篇文章主要介绍了关于vue 的slot分发内容 (多个分发),具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教

slot分发内容 (多个分发)

 组件模板-元素可以用一个特殊的属性 name 来配置如何分发内容。多个 slot 可以有不同的名字。具名 slot 将匹配内容片段中有对应 slot 特性的元素

<style media="screen">
    .panel{
      margin:10px;width:150px;
      border:1px solid #ccc
    }
    .panel-header,.panel-bottom{
      height: 20px;
      background-color:antiquewhite;
    }
    .panel-body{
      min-height: 50px;
    }
  </style>
<div class="app">
    <!--多个slot分发内容 v-for遍历-->
     <panel2 v-for="item in list">
       <h2 slot="title">{{item.title}}</h2>
       <p slot="desc">{{item.desc}}</p>
       <span slot="tims">{{item.tims}}</span>
     </panel2>
  </div>
<!--组件模板-->
<script type="text/x-Template" id="panelTpl">
   <div class="panel">
       <div class="panel-header"><slot name="title"></slot></div>
       <div class="panel-body">
         <slot name="desc"></slot>
       </div>
       <div class="panel-bottom"><slot name="tims"></slot></div>
   </div>
</script>
<script type="text/javascript">
var panelTpl={
  template:'#panelTpl'
}
var vm=new Vue({
  el:'.app',
  components:{//注册组件
    "panel2":panelTpl
  },
  data:{
    list:[
      {title:'新闻一标题',desc:'一的描述',tims:'2018-07-19'},
      {title:'新闻二标题',desc:'二的描述',tims:'2018-07-18'},
      {title:'新闻三标题',desc:'三的描述',tims:'2018-07-17'}
    ]
  }
});
</script>

slot的多种用法

基本用法

//组件
<template>
    <div class="com">
        <slot name="header"></slot>
        <slot>如果没有插槽或者不具名就是显示当前</slot>
        <slot name="floot"></slot>
    </div>
</template>
<script>
    export default {
        
    }
</script>
 
//使用
<template>
	<div id="app">
		<com>
			<div class="header" slot="header">
				我将会插入到名为header的插槽当中
			</div>
			<div class="floot" slot="floot">
				我将会插入到名为floot的插槽当中
			</div>
		</com>
	</div>
</template>
<script>
import com from '@/components/com.vue';
export default {
	name:"App",
	components:{
		com
	}
}
</script>
 

插槽中使用data

//组件
<template>
    <div class="com">
        <slot name="header" :slotData="comData"></slot>//slotData表示插槽key值
        <slot>如果没有插槽或者不具名就是显示当前</slot>
        <slot name="floot" :slotData="comData"></slot>
    </div>
</template>
 
<script>
    export default {
        data() {
            return {
                comData:{
                    header:"我将会插入到名为header的插槽当中",
                    floot:"我将会插入到名为floot的插槽当中"
                }
            }
        },
    }
</script>
 
//使用
<template>
	<div id="app">
		<com>
			<template v-slot:header="{slotData}">
                //必须使用template包裹,v-slot后面跟着的是插槽名,slotData插槽里表示的key值
				<div class="header">
					{{slotData.header}}
				</div>
			</template>
			<template v-slot:floot="{slotData}">
				<div class="floot">
					{{slotData.floot}}
				</div>
			</template>
		</com>
	</div>
</template>
<script>
import com from '@/components/com.vue';
export default {
	name:"App",
	components:{
		com
	}
}
</script>

动态插槽

//组件
<template>
    <div class="com">
        <slot name="header" :slotData="comData"></slot>
        <slot name="body" :slotData="comData"></slot>
        <slot name="floot"></slot>
    </div>
</template>
 
<script>
    export default {
        data() {
            return {
                comData:{
                    header:"我将会插入到名为header的插槽当中",
                    body:"我将会插入到名为body的插槽当中"
                }
            }
        },
    }
</script>
 
//使用
<template>
	<div id="app">
		<com>
			<template v-slot:[slotName]="{slotData}">
				<div class="slot">
					{{slotData[slotName]}}
				</div>
			</template>
			<div class="floot" slot="floot">
				<button @click="changeSlotName">改变动态插槽</button>
			</div>
		</com>
	</div>
</template>
<script>
import com from '@/components/com.vue';
export default {
	name:"App",
	components:{
		com
	},
	data(){
		return{
			slotName:"header"
		}
	},
	methods: {
		changeSlotName(){
			this.slotName = this.slotName === "header" ? "body" : "header";
		}
	}
}
</script>

以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。 

相关文章

  • Vue+Vant实现下拉加载功能

    Vue+Vant实现下拉加载功能

    为了像微信一样方便地加载更多历史消息,这篇文章将为大家介绍我们如何使用vant组件来实现下拉加载功能,感兴趣的小伙伴可以跟随小编一起了解一下
    2023-06-06
  • vue3中使用keepAlive缓存路由组件不生效的问题解决

    vue3中使用keepAlive缓存路由组件不生效的问题解决

    这篇文章主要介绍了vue3中使用keepAlive缓存路由组件不生效的问题解决,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧
    2024-06-06
  • vue在IIS服务器部署后路由无法跳转

    vue在IIS服务器部署后路由无法跳转

    在IIS服务器上部署Vue项目时,可能会遇到路由无法正常跳转的问题,解决方法有两种,下面就来具体介绍一下解决方法,感兴趣的可以了解一下
    2024-10-10
  • Vue接口封装的完整步骤记录

    Vue接口封装的完整步骤记录

    对于中小型企业,vue应用越来越多,学习vue相对于react的成本要低点,入门相对简单。这篇文章主要给大家介绍了关于Vue接口封装的相关资料,需要的朋友可以参考下
    2021-05-05
  • vue实现水波涟漪效果的点击反馈指令

    vue实现水波涟漪效果的点击反馈指令

    鼠标移入时的小手、鼠标点击时按钮下压弹起的动画、触屏应用点击时的屏幕震动,这些效果也被统称为点击反馈,虽然看似是应用中的细枝末节,但是只要稍微投入一点点心思,带来的用户体验提升是十分明显的,这里作者为小伙伴们推荐一种作者最喜欢的点击反馈效果。
    2021-05-05
  • 使用el-row及el-col页面缩放时出现空行的问题及解决

    使用el-row及el-col页面缩放时出现空行的问题及解决

    这篇文章主要介绍了使用el-row及el-col页面缩放时出现空行的问题及解决方案,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2024-03-03
  • Vue.js获取手机系统型号、版本、浏览器类型的示例代码

    Vue.js获取手机系统型号、版本、浏览器类型的示例代码

    这篇文章主要介绍了vue js获取手机系统型号、版本、浏览器类型的示例代码,代码简单易懂,非常不错具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-05-05
  • 解决Vuepress码云部署及自动跳转404的问题

    解决Vuepress码云部署及自动跳转404的问题

    这篇文章主要介绍了解决Vuepress码云部署及自动跳转404的问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2022-09-09
  • vue3组件的挂载更新流程详解

    vue3组件的挂载更新流程详解

    这篇文章主要介绍了vue3组件的挂载更新流程,文中通过代码示例给大家介绍的非常详细,对大家的学习或工作有一定的帮助,需要的朋友可以参考下
    2024-02-02
  • Vue中常用rules校验规则(实例代码)

    Vue中常用rules校验规则(实例代码)

    这篇文章主要介绍了Vue中常用rules校验规则,本文通过实例代码个大家介绍了一些校验方法,需要的朋友可以参考下
    2019-11-11

最新评论