vue3-slot-消息框-模态框

简介: 1.使用vue3 的slot插槽时,大部分和vue2-slot插槽差不多2.但也有一些地方需要注意记录如下

1.前言


1.使用vue3 的slot插槽时,大部分和vue2-slot插槽差不多

2.但也有一些地方需要注意记录如下


2.消息框


GR~3}OU{EC2V]Z]F6N1Z)BB.png


组件


<div class="message-box" v-if="show">
        <slot> </slot>
        <span class="message-box-close" @click="$emit('update:show',false)">X</span>
    </div>

slot 分发的是 组件标签之间的内容

slot在组件内的位置 ,才是 使用组件时候标签内容的实际出口

使用


<message-box v-model:show="showMsgView">警告</message-box>



3. 具名插槽


组件


<template>
  <!-- 具名插槽 -->
  <transition name="fade">
    <div class="message-box" v-if="show">
      <!-- title="来子组件自己的标题" -->
      <slot name="title" content="我是子组件的哦"> 默认标题</slot>
      <slot></slot>
      <span class="message-box-close" @click="$emit('update:show', false)"
        >X</span
      >
    </div>
  </transition>
</template>
<script> 
export default {
  props: ["show"],
};
</script>

在消息组件的基础上进行修改的

使用


<name-slot v-model:show="showMsgView">
      <!-- 名为title插槽的内容 -->
      <template v-slot:title="slotData">
        <!-- msg默认是当前组件里面的数据 -->
        <h1>温馨提示</h1>
        <p> 父组件:{{ msg }}  </p>
        <p>{{ slotData.content }}</p>
      </template>
      <template v-slot:default> 默认插槽 </template>
    </name-slot>

v-lslot的写法 标准化了

易错分析-1

3U1`S]UOOK7W@IM(%P1}~OS.png


v-slot 指令只能用于组件 或者 template

易错分析-2

T88JXM~60PVKTO2G1PY2R2I.png


普通标签和 template同时存在的话   template会被忽略掉

参考资料

v2-slot插槽

易错分析-3

QMY%@MJCOXJG`)0SC$5CA%B.png

1.png

默认插槽只能有一个,多余的会被忽略掉


4.模态框


4.1 添加模态

V{CC6E_K@TN27N`{9@HIO$B.png


模板


<template>
  <div>
    <transition name="move">
      <div
        class="mark-wrap"
        v-show="modelValue"
        @click="$emit('update:modelValue', false)"
      >
        <div class="content-wrap" @click.stop>
          <span class="close" @click="$emit('update:modelValue', false)"
            >×</span
          >
          <h3>{{ title }}</h3>
          <div class="content">
            <slot></slot>
          </div>
        </div>
      </div>
    </transition>
  </div>
</template>

整个背景灰色 ,点击消失

逻辑


<script>
export default {
  props: ["modelValue", "title"],
  props:{
      modelValue:{
          type:Boolean,
          required:true,
          default:false
      },
       title:{
          type:String,
          default:"标题"
      }
  }
};
</script>


样式


<style  scoped>
* {
  margin: 0;
  padding: 0;
}
.mark-wrap {
  position: fixed;
  width: 100vw;
  height: 100vh;
  background-color: rgba(0, 0, 0, 0.3);
  top: 0;
  left: 0;
}
.content-wrap {
  padding: 30px;
  max-height: 500px;
  overflow: auto;
  background-color: white;
  border-radius: 10px;
  position: absolute;
  top: 200px;
  left: 50%;
  transform: translateX(-50%);
}
.close {
  position: absolute;
  top: 0px;
  right: 20px;
  font-size: 30px;
  cursor: pointer;
}
.content-wrap h3 {
  padding: 10px 0 10px 10px;
  border-bottom: 1px solid #dedede;
}
.content {
  padding: 10px;
}
/* 过渡 */
.move-enter-from,
.move-leave-to {
  opacity: 0;
}
.move-enter-active,
.move-leave-active {
  transition: all 0.5s;
}
</style>

样式整个背景的灰色

使用


<button @click="showModal = true">添加用户</button>
    <my-modal v-model:modelValue="showModal">
    <label>
      <input type="text" placeholder="用户名">
    </label>
    <label>
      <input type="text" placeholder="密码">
    </label>
    </my-modal>

默认不传标题

4.2 查看信息

]W)RG5)WGV_110ASV_CM0L7.png


使用的组件 还是之前的组件

内容不同,由使用者传递具体的内容

这才能体会到  slot分发 到底啥意思


<button @click="showUpdateModal = true">查看用户</button>
    <my-modal v-model:modelValue="showUpdateModal" title="查看用户">
      <table>
        <tr>
          <td>用户名</td>
          <td>性别</td>
          <td>年龄</td>
        </tr>
      </table>
    </my-modal>




相关文章
|
8月前
|
前端开发 JavaScript
u-popup组件在UniApp中的讲解
u-popup组件在UniApp中的讲解
442 0
|
19天前
|
前端开发 JavaScript 开发者
React 按钮组件 Button
本文介绍了 React 中按钮组件的基础概念,包括基本的 `&lt;button&gt;` 元素和自定义组件。详细探讨了事件处理、参数传递、状态管理、样式设置和可访问性优化等常见问题及其解决方案,并提供了代码示例。帮助开发者避免易错点,提升按钮组件的使用体验。
155 77
|
2月前
|
前端开发 UED
React 模态框 Modal 组件详解
【10月更文挑战第27天】本文介绍了如何在 React 中实现一个功能完善的模态框组件。从基础概念入手,逐步讲解了简单的模态框实现、CSS 样式、传递子组件、键盘事件处理等高级功能。同时,还探讨了常见问题及易错点,如背景点击关闭、键盘事件冲突和动画效果。通过本文,读者可以全面了解 React 模态框组件的实现细节。
131 0
|
5月前
|
JavaScript
Vue2按钮组件(Button)
这篇文章介绍了如何在Vue框架中创建一个可自定义样式和行为的按钮组件,包括按钮的文本、类型、尺寸、宽度、高度、圆角、跳转目标、禁用状态和是否居中显示等属性。
184 1
Vue2按钮组件(Button)
|
5月前
|
JavaScript
Vue3按钮(Button)
这是一个高度可定制的按钮组件,支持多种属性设置,包括按钮类型、形状、图标、尺寸、背景透明度、波纹颜色、跳转地址、打开方式、禁用状态、加载状态及指示符样式等。预览图展示了不同配置下的按钮样式变化。组件通过Vue实现,并提供了丰富的自定义选项以适应各种场景需求。
250 1
Vue3按钮(Button)
|
5月前
Vue3对话框(Dialog)
该 Vue2 对话框组件提供丰富的可定制属性,如标题、内容、宽度、高度等,并支持自定义按钮文本和样式。其预览效果展示了多种使用场景,包括全屏切换、加载状态及自定义样式等。该组件适用于各种需要弹窗功能的应用场景。[在线预览](https://themusecatcher.github.io/vue-amazing-ui/guide/components/dialog.html)提供了更多实例。此文章详情见原文链接,若涉及版权问题,请告知以便删除。
177 1
Vue3对话框(Dialog)
|
5月前
|
JavaScript
Vue3抽屉(Drawer)
这是一个基于Vue的抽屉组件(Drawer),提供了丰富的自定义选项,如宽度、高度、标题、关闭按钮等,并支持顶部、右侧、底部和左侧四种方向。
182 0
Vue3抽屉(Drawer)
|
5月前
Vue3标签页(Tabs)
该组件提供可自定义的标签页功能,支持居中显示、不同尺寸与样式,并能设置当前激活选项。其主要属性包括标签页数组、居中显示、尺寸、样式、间隙及激活键值。示例展示了基本使用、卡片式标签页、禁用选项、左右滑动等功能。组件基于Vue3开发,并利用`useResizeObserver`等技术实现。[在线预览](https://themusecatcher.github.io/vue-amazing-ui/guide/components/tabs.html)。
215 0
Vue3标签页(Tabs)
|
5月前
Vue2对话框(Dialog)
这是一篇介绍如何在Vue3中使用对话框(Dialog)的文章。该对话框组件可自定义标题、内容、尺寸等属性,并支持全屏切换、加载中状态等功能,整体样式参考了ant-design-vue Modal的设计。文章详细介绍了创建和使用Dialog组件的方法。
Vue2对话框(Dialog)
|
8月前
|
JavaScript 前端开发 UED
教你用vue自定义指令做一个组件的遮罩层loading效果
教你用vue自定义指令做一个组件的遮罩层loading效果
650 0