【Vue】插槽-slot

news2024/10/6 8:23:30

       📝个人主页:五敷有你      

 🔥系列专栏:Vue

⛺️稳中求进,晒太阳

插槽

作用:让组件内部一些 结构 支持 自定义

插槽的分类:

  • 默认插槽。
  • 具名插槽。

基础语法

组件内需要定制的结构部分,改用占位

<template>
    <div class="main">
        <h2>确认吗</h2>
        <slot></slot>
        <div class="bottom">
            <button>确认</button><button>取消</button>
        </div>
    </div>
</template>

使用组件时,标签内部,传入结构替换slot

<BaseA>我是插槽练习</BaseA>

插槽的默认值

通过插槽完成内容的定制,传什么显示什么,但是不传,则是空白

插槽的后备内容:封装组件时,可以为预留的插槽提供后备内容(默认内容)

  • 语法:在slot标签内,放置内容,作为默认显示内容
  • 效果:
    • 外部使用组件不传东西,则slot会显示后备内容
    • 外部使用组件传东西了,则slot整体会被替换掉

具名插槽(一个组件有多处结构需要外部传入标签,进行定制)

语法:

多个slot使用name属性区分名字

简写:v-slot:插槽名 简化---- #插槽名

    <div class="main">
        <h2>
            <slot name="head"></slot>
        </h2>
        <slot name="body">我是默认值</slot>
        <div class="bottom">
            <slot name="foot"></slot>
        </div>
    </div>

template配置v-slot:名字 来分发对应标签

   <BaseA>
      <template v-slot:head>
        我是标题
      </template>
    <template v-slot:body>
      <p>我是身体</p>
    </template>
    <template v-slot:foot>
      <button>确认</button><button>取消</button>
    </template>
    </BaseA>

作用域插槽

作用域插槽:定义slot插槽的同时,是可以传值的,给插槽上 可以绑定数据, 将来 使用组件时可以用

场景:封装表格组件

基本使用步骤:

1. 给slot标签,以添加属性的方式传值。

<slot :id="item.id" msg="测试文本"></slot>

2. 所有添加属性,都会收集到一个对象中

{id:3,msg:"测试文本"}

3. 在template中,通过 #插槽名='obj'接收,默认插槽名为 default

<MyTable :list="list">
    <template #default="obj">
        <button @click="del(obj.id)">删除</button>
    </template>
   </MyTable> 

商品列表(实战):

App.vue

<template>
  <div id="app">
    <MyTable :list="list">
      <template #thead>
          
            <td>编号</td>
          <td>图片</td>
          <td>名称</td>
          <td>标签</td>
       
      </template>
      <template #tbody="{item,index}" >
            <td>{{ index+1 }}</td>
            <td>{{ item.img }}</td>
            <td>{{ item.name }}</td>
            <td><MyEle v-model="item.sign"></MyEle></td>
      </template>
    </MyTable>
  </div>
</template>

<script>

import MyEle from "./components/MyEle.vue"
import MyTable from "./components/MyTable.vue"
export default {
  data(){
    return{
      list:[
      {id:101,img:'001',name:"紫砂壶",sign:"茶具"},
      {id:102,img:'001',name:"皮鞋",sign:"男鞋"},
      {id:103,img:'001',name:"棉衣",sign:"衣服"},
      {id:104,img:'001',name:"毛衣",sign:"衣服"},
      {id:105,img:'001',name:"帽子",sign:"衣服"}
  ]
    }
 
  },

components:{
 MyEle,
 MyTable
},
methods:{
  
},


//局部注册指令
directives:{
  //指令名:指令配置项
    color:{
      inserted(el,binding){
        el.style.color=binding.value
      },
      update(el,binding){
        el.style.color=binding.value
      }
    }
},

}



</script>

<style scoped>
#app {
  
  font-family: Avenir, Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;

  margin-top: 60px;
  display: flex;
  justify-content: space-around;
}

</style>

MyTable.vue

<template>
<div class="main">
    <table border="1">
        <thead>
            <tr>
                <!-- <td>编号</td>
                <td>图片</td>
                <td>名称</td>
                <td>标签</td> -->
                <slot name="thead">

                </slot>
            </tr>
        </thead>
        <tbody>
            <tr v-for="(item,index) in list" :key="item.id">
                <slot name="tbody" :item="item" :index="index" ></slot>
            </tr>
              
        </tbody>
    </table>
</div>
</template>
<script>

export default {
    props:{
        "list":Array,
        

    }
}
</script>
<style scoped>

</style>

Mytag.vue

<template>
<div class="main">
    <div class="ele" v-if="isShow" @click="isShow=false">
       {{ value }}
    </div>
    <div v-else>
        <input type="text" :value="value" v-focus @keyup.enter='update'>
    </div>
</div>
    
    
</template>
<script>

export default {
    props:{
       
        "value":String
    },
    data(){
        return {
           
            isShow:true,
        }
    },
    directives:{
        focus:{
            inserted(el){
                el.focus()
            }
        }
    },
    methods:{
        update(e){
            
            this.$emit("input",e.target.value)
            this.isShow=true
        }
    }
}
</script>
<style scoped>
.ele{
    text-align: center;
    color:rgb(50, 49, 49);
    font-size: 15px;
}
input{
    padding: 3px 4px;
    color:gray;
    font-size: 13px;
}
</style>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1476795.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何利用HubSpot出海营销CRM实现品牌建设与传播的有效管理?

利用HubSpot出海营销CRM优化客户互动和沟通可以通过以下方式实现&#xff1a; 个性化客户管理&#xff1a; 利用HubSpot的客户管理功能&#xff0c;集中管理客户信息&#xff0c;并根据客户的行为、偏好和历史数据等信息进行个性化分类和标记。这样可以更好地了解客户需求&am…

[CSS]文字旁边的竖线以及布局知识

场景&#xff1a;文字前面常见加竖线。 .center-title { 常见内容color: #FFF;font-family: "Source Han Sans CN";font-size: 50px;font-style: normal;font-weight: 700;line-height: normal;position: relative; 要定位left: 16px; 这里是想拉开间距margin-b…

力扣-跳跃游戏

问题 给你一个非负整数数组 nums &#xff0c;你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。 判断你是否能够到达最后一个下标&#xff0c;如果可以&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 解答 class Solu…

CUMT---图像处理与视觉感知---期末复习重点

文章目录 一、概述 本篇文章会随课程的进行持续更新中&#xff01; 一、概述 1. 图像的概念及分类。  图像是用各种观测系统以不同形式和手段观测客观世界而获得的、可以直接或间接作用于人的视觉系统而产生的视知觉实体。  图像分为模拟图像和数字图像&#xff1a;(1) 模拟图…

开源的 Python 数据分析库Pandas 简介

阅读本文之前请参阅-----如何系统的自学python Pandas 是一个开源的 Python 数据分析库&#xff0c;它提供了高性能、易用的数据结构和数据分析工具。Pandas 特别适合处理表格数据&#xff0c;例如时间序列数据、异构数据等。以下是对 Pandas 的简明扼要的介绍&#xff0c;包括…

基于React, Redux实现的俄罗斯方块游戏及源码

分享一个俄罗斯方块游戏游戏框架使用的是 React Redux&#xff0c;其中再加入了 Immutable&#xff0c;用它的实例来做来Redux的state。&#xff08;有关React和Redux的介绍可以看 安装 npm install运行 npm start浏览自动打开 http://127.0.0.1:8080/ 打包编译 npm run …

Vue源码系列讲解——生命周期篇【七】(模板编译阶段)

目录 1. 前言 2. 模板编译阶段分析 2.1 两种$mount方法对比 2.2 完整版的vm.$mount方法分析 3. 总结 1. 前言 前几篇文章中我们介绍了生命周期的初始化阶段&#xff0c;我们知道&#xff0c;在初始化阶段各项工作做完之后调用了vm.$mount方法&#xff0c;该方法的调用标志…

mongoDB 优化(1)索引

1、创建复合索引&#xff08;多字段&#xff09; db.collection_test1.createIndex({deletedVersion: 1,param: 1,qrYearMonth: 1},{name: "deletedVersion_1_param_1_qrYearMonth_1",background: true} ); 2、新增索引前&#xff1a; 执行查询&#xff1a; mb.r…

第3部分 原理篇2去中心化数字身份标识符(DID)(4)

3.2.3. DID解析 3.2.3.1. DID解析参与方 图3-5 DID 解析过程 本聪老师&#xff1a;我们之前提到过&#xff0c;DID 解析过程是将 DID 转换为对应的 DID 文档。这样做的目的是验证 DID 所代表的主体的身份。那么解析过程会涉及哪些概念呢&#xff1f;我们看图3-&#xff0c;DI…

uniapp 微信小程序使用高德地图Vue3不兼容Vue2问题

1. uniapp 微信小程序使用高德地图Vue3不兼容Vue2问题 1.1. 问题 uniapp Vue3项目引用高德地图报错 import amapPlugin from ‘…/…/…/js_sdk/js_amap/amap-wx.130’; "default" is not exported by "../../../MyProject/Base/Szy/js_sdk/js_amap/amap-wx.1…

springboot+vue网站开发-后端管理框架-vue-admin-template

为了方便国内用户下载&#xff0c;我把自己的百度网盘分享给大家一份地址&#xff0c;可以去下载。 如果你有上网盒子软件&#xff0c;那就自己去下载&#xff0c;很小。不到1MB. 链接&#xff1a;https://pan.baidu.com/s/15LJ2MoSWToFGFp28VaxBeQ?pwdbaby 提取码&#xff…

C++之queue和dqueue

1、queue queue&#xff08;队列&#xff09;&#xff0c;一种数据结构&#xff0c;可以让某些数据结构的操作变得简单。队列&#xff08;queue&#xff09;最大的特点就是先进先出。就是说先放入queue容器的元素一定是要先出队列之后&#xff0c;比它后进入队列的元素才能够出…

【MATLAB源码-第150期】基于matlab的开普勒优化算法(KOA)机器人栅格路径规划,输出做短路径图和适应度曲线。

操作环境&#xff1a; MATLAB 2022a 1、算法描述 开普勒优化算法&#xff08;Kepler Optimization Algorithm, KOA&#xff09;是一个虚构的、灵感来自天文学的优化算法&#xff0c;它借鉴了开普勒行星运动定律的概念来设计。在这个构想中&#xff0c;算法模仿行星围绕太阳的…

图论(算法竞赛、蓝桥杯)--Dijkstra算法最短路

1、B站视频链接&#xff1a;D02 最短路 Dijkstra 算法_哔哩哔哩_bilibili 题目链接&#xff1a;【模板】单源最短路径&#xff08;弱化版&#xff09; - 洛谷 #include <bits/stdc.h> using namespace std; #define INF 2147483647 int n,m,s,a,b,c; const int N100010…

Spring Boot项目中如何上传头像?

在我们常见的各大App中&#xff0c;或多或少我们都见过上传头像的功能吧&#xff1f;&#xff1f; 但是在Spring Boot项目中如何上传头像呢&#xff1f; 上传头像主要用到RequestPart注解 来看一下小编的代码吧&#xff01; RestController RequestMapping("/param"…

ONLYOFFICE桌面编辑器v8.0完整指南:安装、特点与新增功能

文章目录 摘要引言安装主界面可填写的 PDF 表单双向文本支持电子表格中的新增功能其他改进与Moodle集成用密码保护PDF文件从“开始”菜单快速创建文档本地界面主题安装免费的 ONLYOFFICE桌面编辑器 总结 摘要 本文介绍了ONLYOFFICE桌面编辑器v8.0的安装、主界面特点以及新增功…

R语言实现分位数回归和二次分位数回归

大家好&#xff0c;我是带我去滑雪&#xff01;新的一年&#xff0c;新的气象&#xff0c;在接下来的日子里我将继续和各位小伙伴们分享我在科研道路上&#xff0c;学习的一些知识&#xff01; 分位数回归和二次分位数回归是统计学中用于分析因变量与自变量之间关系的方法&…

【InternLM 实战营笔记】浦语大模型趣味 Demo

大模型及 InternLM 模型简介 1.1 什么是大模型&#xff1f; 大模型通常指的是机器学习或人工智能领域中参数数量巨大、拥有庞大计算能力和参数规模的模型。这些模型利用大量数据进行训练&#xff0c;并且拥有数十亿甚至数千亿个参数。大模型的出现和发展得益于增长的数据量、…

s-table和columns初始化不完整,造成table文件的filter报错

问题 顺藤摸瓜找errorHandler.js文件 发现文件并没有什么问题 顺藤摸瓜找index.vue文件 首先找到报错的filter&#xff0c;发现与columnsSetting相关 找到columnsSetting发现等于columns 返回自己使用S-table组件的地方&#xff0c;发现columns初始化时仅初始化为ref()未表明…

微信小程序证书评级导致接口无法访问问题

微信小程序的ssl证书到期后&#xff0c; 更换了免费的ssl证书&#xff0c; 是在freessl网站申请的&#xff0c; 配置完了&#xff0c;后台可以访问https网页&#xff0c;但是小程序还是无法访问&#xff0c; 开始没有怀疑是https证书的问题&#xff0c; 调适了好长时间的代码&a…