Vue 3 中创建一个动态的组件实例

本文将介绍如何在 Vue 3 中实现一个动态 Toast 组件实例。我们将创建一个简单的 Toast 组件,并使用一个动态创建实例的脚本来显示 Toast 消息。在 Vue 3 中创建动态组件实例有许多好处,这些好处主要体现在灵活性、性能、可维护性和用户体验等方面。

创建 Toast 组件

首先,我们需要创建一个名为 Toast.vue 的组件。这个组件将接收两个 props:messageshowToast,并根据 showToast 的值显示不同的图片。

<!-- Toast.vue -->
<template>
  <div class="custom-toast flex-col justify-c align-c">
    <img v-if="showToast" src="../../../public/img/toast1.png" alt="" />
    <img v-else src="../../../public/img/toast2.png" alt="" />
    <div class="message">{{ props.message }}</div>
  </div>
</template>

<script>
export default {
  name: 'Toast'
}
</script>

<script setup>
import { onMounted } from 'vue'

const props = defineProps({
  message: {
    type: String,
    default: '说话时间太短'
  },
  showToast: {
    type: Boolean,
    default: () => false
  }
})

onMounted(() => {})
</script>

<style scoped lang="scss">
.custom-toast {
  width: 420px;
  height: 452px;
  background: #01071e;
  border-radius: 32px;
  opacity: 0.9;
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  z-index: 9;
  img {
    // width: 224px;
    // height: 117px;
  }
  .message {
    margin-top: 50px;
    font-weight: 500;
    font-size: 42px;
    color: #f8fbff;
  }
}
</style>

动态创建 Toast 实例

接下来,我们将创建一个名为 toast.js 的文件,用于动态创建和显示 Toast 实例。这个脚本将导出一个 createToast 函数,该函数接收三个参数:message 和 showToast, duration 。它会创建一个新的 Toast 实例,并在页面上显示一段时间后移除。

// toast.js
import { createApp } from 'vue'
import Toast from './Toast.vue'

function createToast(message, showToast,duration = 1000) {
  const toastInstance = createApp(Toast, {
    message,
    showToast
  })
  const mountNode = document.createElement('div')
  document.body.appendChild(mountNode)
  toastInstance.mount(mountNode)

  setTimeout(() => {
    toastInstance.unmount(mountNode)
    document.body.removeChild(mountNode)
  }, duration )
}

export default createToast

使用动态 Toast 组件

要使用我们刚刚创建的动态 Toast 组件,只需要在需要显示 Toast 的地方调用 createToast 函数,并传入适当的参数。

import createToast from './toast.js'

// 显示 Toast 消息
createToast('这是一个 Toast 消息', true)

在这里插入图片描述

总结

  • 通过上述步骤,我们在 Vue 3 中成功实现了一个动态 Toast
    组件实例。这个组件能够在运行时根据传入的参数显示不同的内容,并在一段时间后自动消失。这种动态组件实例的创建方式使得我们可以在应用中灵活地显示临时的
    UI 元素,而无需将它们预先定义在模板中。

优点

  • 解耦合:动态创建组件实例,使得组件的使用更加灵活,不需要在模板中预先定义。
  • 减少 DOM 操作:动态创建和销毁组件实例,可以减少对 DOM 的直接操作,提升性能。
  • 易于维护:所有与 Toast 相关的逻辑集中在一个地方,易于维护和修改。通过这种方式,我们可以轻松地在 Vue 3 应用中实现动态的 UI 元素,提升用户体验。
  • 4
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Vue 创建一个组件有几种方法,下面是其两种常用的方法: 1. 单文件组件 (Single-File Components) 单文件组件使用`.vue`文件扩展名,将模板、样式和逻辑代码封装在一个文件。这是最常用的创建组件的方式。 1. 创建一个`.vue`文件,例如 `MyComponent.vue`。 2. 在`.vue`文件定义模板、式和逻辑代码。例如: ```html <template> <div> <h2>{{ title }}</h2> <p>{{ message }}</p> </div> </template> <script> export default { data() { return { title: 'Hello', message: 'Welcome to my component' } } } </script> <style scoped> h2 { color: blue; } </style> ``` 3. 在其他组件或入口文件使用该组件。例如: ```html <template> <div> <my-component></my-component> </div> </template> <script> import MyComponent from './MyComponent.vue' export default { components: { MyComponent } } </script> ``` 2. 全局组件 (Global Components) 全局组件是在 Vue 的根实例Vue 实例注册的组件,可以在整个应用使用。 1. 在 Vue 实例注册全局组件。例如: ```javascript import Vue from 'vue' import MyComponent from './MyComponent.vue' Vue.component('my-component', MyComponent) ``` 2. 在其他组件或入口文件使用该组件。例如: ```html <template> <div> <my-component></my-component> </div> </template> ``` 这些方法,单文件组件是最常用的方式,因为它将模板、样式和逻辑代码组织在一个文件,更易于维护和开发。全局组件则适用于在整个应用频繁使用的组件。无论使用哪种方式,组件都可以像原生的 HTML 元素一样在模板使用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值