Vue(slot)插槽

vue插槽

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

1 默认插槽

默认插槽基本语法:
1.组件内需要定制的结构部分,改用占位
2.使用组件时,直接在标签内部,传入结构替换slot
需求:在页面中显示两个列表 一个是员工信息列表 一个是学生信息列表 对组件中的地方进行定制

在这里插入图片描述

在这里插入图片描述
默认插槽只能完成一个位置的定制 如果还想完成多个地方的定制就要使用具名插槽
AnLi.vue组件代码:

<template>
  <div class="box">
    <!-- 1在需要定制的地方进行<slot></slot>占位 -->
    <slot>我是备用内容 如果不插槽我将会显示</slot>
    <table
      style="border-collapse: collapse; width: 500px; text-align: center"
      align="center"
      border="1"
    >
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作</th>
      </tr>
      <tr>
        <td>1</td>
        <td></td>
        <td></td>
        <td></td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {};
</script>

<style scoped>
h1 {
  text-align: center;
}
</style>

App.vue组件代码:

<template>
  <div id="app">
    <!-- 2在使用组件时。在其标签内填入内容  在这里使用AnLi组件 填入<h1>员工信息列表</h1>内容 -->
    <AnLi>
      <h1>员工信息列表</h1>
    </AnLi>
    <AnLi>
      <h1>学生信息列表</h1>
    </AnLi>
  </div>
</template>

<script>
import AnLi from "./components/AnLi.vue";
export default {
  data() {
    return {};
  },
  components: {
    AnLi,
  },
};
</script>

<style scoped>
img {
  display: block;
  width: 500px;
  margin: 0 auto;
}
</style>

运行结果:
在这里插入图片描述

2 具名插槽

具名插槽基本语法:
1 多个slot使用name属性区分名字
2 .template配合v-slot:名字来分发对应标签 v-slot可以用#进行简写

AnLi.vue组件代码:

<template>
  <div class="box">
    <!-- 1在需要定制的地方进行<slot></slot>占位 并给name属性 -->
    <slot name="biaoti">我是备用内容 如果不插槽我将会显示</slot>

    <slot name="tupian"></slot>

    <table
      style="border-collapse: collapse; width: 500px; text-align: center"
      align="center"
      border="1"
    >
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作</th>
      </tr>
      <tr>
        <td>1</td>
        <td></td>
        <td></td>
        <td></td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {};
</script>

<style scoped>
h1 {
  text-align: center;
}
</style>

app.vue组件代码:

<template>
  <div id="app">
    <!-- 2在使用组件时。在其标签内填入内容  在这里使用AnLi组件  -->
    <AnLi>
      <!-- template配合v-slot:名字来分发对应标签 -->
      <template v-slot:biaoti>
        <h1>员工信息列表</h1>
      </template>
      //此处v-slot用简写方式
      <template #tupian>
        <img src="../img/1.jpg" alt="" />
      </template>
    </AnLi>
    <AnLi>
      <h1>学生信息列表</h1>
    </AnLi>
  </div>
</template>

<script>
import AnLi from "./components/AnLi.vue";
export default {
  data() {
    return {};
  },
  components: {
    AnLi,
  },
};
</script>

<style scoped>
img {
  display: block;
  width: 500px;
  margin: 0 auto;
}
</style>

运行结果:
在这里插入图片描述

作用域插槽

作用域插槽:定义 slot 插槽的同时是可以传值的。给插槽上可以绑定数据,将来使用组件时可以用。
在这里插入图片描述
AnLi.vue组件代码:

<template>
  <div class="box">
    <!-- 1在需要定制的地方进行<slot></slot>占位 并给name属性 -->
    <slot name="biaoti">我是备用内容 如果不插槽我将会显示</slot>

    <table
      style="border-collapse: collapse; width: 500px; text-align: center"
      align="center"
      border="1"
    >
      <tr>
        <th>序号</th>
        <th>姓名</th>
        <th>年龄</th>
        <th>操作</th>
      </tr>
      <tr v-for="(item, index) in list" :key="item.id">
        <td>{{ index + 1 }}</td>
        <td>{{ item.name }}</td>
        <td>{{ item.age }}</td>
        <td>
          <!-- 1此处传值:row="item" msg="测试传参"  给父组件使用 -->
          <slot name="caozuo" :row="item" msg="测试传参"></slot>
          <!-- 2将所有属性添加到一个对象  app组件接受到的是一下对象
          {
            row: {}, 
            msg: '测试传参'
          }
           -->
        </td>
      </tr>
    </table>
  </div>
</template>

<script>
export default {
  props: ["list"],
};
</script>

<style scoped>
h1 {
  text-align: center;
}
</style>

App.vue组件代码:

<template>
  <div id="app">
    <!-- 2在使用组件时。在其标签内填入内容  在这里使用AnLi组件  -->
    <AnLi :list="list">
      <!-- template配合v-slot:名字来分发对应标签 -->
      <template v-slot:biaoti>
        <h1>员工信息列表</h1>
      </template>
      <!-- 此处接受  用obj接受到 slot标签传递过来的对象-->
      <template #caozuo="obj">
        <!-- 此处需要拿到要删除的id  item。id -->
        <button @click="del(obj.row.id)">删除</button>
      </template>
    </AnLi>
    <hr />
    <hr />
    <AnLi :list="list2">
      <template v-slot:biaoti>
        <h1>学生信息列表</h1>
      </template>
      <template #caozuo="item">
        <button @click="show(item)">查看</button>
      </template>
    </AnLi>
  </div>
</template>

<script>
import AnLi from "./components/AnLi.vue";
export default {
  data() {
    return {
      list: [
        { id: 1, name: "赵露思", age: 17 },
        { id: 2, name: "小李子", age: 37 },
        { id: 3, name: "迪丽热巴", age: 27 },
      ],
      list2: [
        { id: 1, name: "小米", age: 17 },
        { id: 2, name: "小名", age: 37 },
        { id: 3, name: "小红", age: 27 },
      ],
    };
  },
  components: {
    AnLi,
  },
  methods: {
    del(id) {
      // console.log(id);
      this.list = this.list.filter((item) => item.id !== id);
    },
    show(item) {
      // console.log(item);
      alert(`姓名:${item.row.name}  年龄:${item.row.age}`);
    },
  },
};
</script>

<style scoped>
img {
  display: block;
  width: 500px;
  margin: 0 auto;
}
</style>

运行结果:
运行结果

点击查看信息
点击删除员工

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
目标检测(Object Detection)是计算机视觉领域的一个核心问题,其主要任务是找出图像中所有感兴趣的目标(物体),并确定它们的类别和位置。以下是对目标检测的详细阐述: 一、基本概念 目标检测的任务是解决“在哪里?是什么?”的问题,即定位出图像中目标的位置并识别出目标的类别。由于各类物体具有不同的外观、形状和姿态,加上成像时光照、遮挡等因素的干扰,目标检测一直是计算机视觉领域最具挑战性的任务之一。 二、核心问题 目标检测涉及以下几个核心问题: 分类问题:判断图像中的目标属于哪个类别。 定位问题:确定目标在图像中的具体位置。 大小问题:目标可能具有不同的大小。 形状问题:目标可能具有不同的形状。 三、算法分类 基于深度学习的目标检测算法主要分为两大类: Two-stage算法:先进行区域生成(Region Proposal),生成有可能包含待检物体的预选框(Region Proposal),再通过卷积神经网络进行样本分类。常见的Two-stage算法包括R-CNN、Fast R-CNN、Faster R-CNN等。 One-stage算法:不用生成区域提议,直接在网络中提取特征来预测物体分类和位置。常见的One-stage算法包括YOLO系列(YOLOv1、YOLOv2、YOLOv3、YOLOv4、YOLOv5等)、SSD和RetinaNet等。 四、算法原理 以YOLO系列为例,YOLO将目标检测视为回归问题,将输入图像一次性划分为多个区域,直接在输出层预测边界框和类别概率。YOLO采用卷积网络来提取特征,使用全连接层来得到预测值。其网络结构通常包含多个卷积层和全连接层,通过卷积层提取图像特征,通过全连接层输出预测结果。 五、应用领域 目标检测技术已经广泛应用于各个领域,为人们的生活带来了极大的便利。以下是一些主要的应用领域: 安全监控:在商场、银行
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值