当前位置: 首页 > news >正文

vue3 组件篇 Message

文章目录

    • 组件介绍
    • 组件使用
    • 组件代码
    • 参数说明
    • 关于vue3-dxui组件库

组件介绍

Message组件用以消息提示,用户在前端完成某些交互时,在页面弹出的某种反馈。该组件一共有四种类型,info、success、warning、error。与一般的组件不同,该组件调用后,持续一段时间会消失,并且采用函数式调用。

函数式调用组件,一般适用于,组件自身相对于屏幕定位,比如Dialog、Message、Pop等

组件使用

需要先安装vue3-dxui,请安装1.1.1及之后的版本

yarn add vue3-dxui

或者

npm install vue3-dxui

全局main.ts中引入css

import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import 'vue3-dxui/dxui/dxui.css'

createApp(App).use(store).use(router).mount('#app')

通过MessageApi调用

import { MessageApi } from 'vue3-dxui'
setup() {
	const handleOtherMessage = function () {
	  MessageApi.open({
	    type: 'info',
	    duration: 3000,
	    content: 'Hello dxui!'
	  })
	}
}

当然,可以使用回调,因为MessageApi.open将会返回一个promise,所以,回调的方式如下

MessageApi.open({
        type,
        duration: 3000,
        content: 'Hello dxui!'
      }).then(() => {
        alert('message执行完了')
      })

组件代码

vue代码,该代码使用了Icon组件

<template>
  <div v-if="messageShow" class="dx-message" :class="`dx-message-${iconType}`" :style="style">
    <Icon :iconName="iconType" :style="{ 'vertical-align': 'baseline' }" />
    <span class="dx-message-content">{{ content }}</span>
  </div>
</template>

<script lang="ts">
import { ref, SetupContext, PropType, CSSProperties } from 'vue'

// import { useRouter } from 'vue-router'
import Icon from '@/components/icon/Icon.vue'

import { Data } from './types/index'

export default {
  props: {
    // message 的类型 info success warning error
    type: {
      type: String,
      default: 'info'
    },
    // 展示的时间 单位ms
    duration: {
      type: Number,
      default: 5000
    },
    // 内容
    content: {
      required: true,
      type: String,
      default: ''
    },
    style: Object as PropType<CSSProperties>
  },
  components: {
    Icon
  },
  data() {
    return {
      // messageShow: true,
    }
  },
  setup(props: Data, context: SetupContext) {
    // const currentInstance: ComponentInternalInstance | null = getCurrentInstance()
    const messageShow = ref(true)
    const iconType = ref(props.type)
    // const iconName = ref(props.type)

    setTimeout(() => {
      messageShow.value = false
    }, props.duration as number)
    return {
      messageShow,
      // iconName,
      iconType
    }
  }
}
</script>

<style lang="scss">
@import '@/scss/layout.scss';

.dx-message-list {
  position: fixed;
  top: 10%;
  left: 50%;
  z-index: 10000;
  margin-bottom: 24px;
}

.dx-message {
  border-radius: 6px;
  box-shadow: $box-shadow;
  padding: 6px 16px;
  font-size: 14px;
  // position: fixed;
  background: $white-color;
  // top: 10%;
  // left: 50%;
  // z-index: 10000;
  margin-bottom: 24px;

  .dx-message-content {
    margin-left: 8px;
  }
}

.dx-message-info {
  .dx-icon {
    color: $blue-color;
  }
}

.dx-message-success {
  .dx-icon {
    color: $green-color;
  }
}

.dx-message-error {
  .dx-icon {
    color: $red-color;
  }
}

.dx-message-warning {
  .dx-icon {
    color: $orange-color;
  }
}
</style>

ts代码

import { createVNode, render } from 'vue'
import Message from '@/components/message/Message.vue'

let div: any = ''

const MessageApi = {
  open: (options: any) => {
    let timer: any = ''

    return new Promise((resolve) => {
      if (!div) {
        div = document.createElement('div')
        div.setAttribute('class', 'dx-message-list')
        document.body.appendChild(div)
      }

      const item = document.createElement('div')
      item.setAttribute('class', 'dx-message-item')

      div.appendChild(item)

      const MessageComponents = createVNode(Message, { type: 'info', ...options })
      render(MessageComponents, item)
      timer = setTimeout(() => {
        render(null, item)
        item.remove()

        const divCount = document.querySelectorAll('.dx-message-item').length
        if (!divCount) {
          div.remove()
          div = undefined
        }

        resolve('')
      }, options.duration)
    })
  }
}

export default MessageApi

参数说明

名称说明
type一共有四种,info、error、warning、success
content提示的主要内容
duration消息提示持续的时间

关于vue3-dxui组件库

dxui网站介绍 http://www.dxyx-together.cn/#/home/message

github代码仓库 https://github.com/757363985/dxui

npmjs安装包地址 https://www.npmjs.com/package/vue3-dxui

相关文章:

  • clip精读
  • 超级实用,解密云原生监控技术,使用prometheus轻松搞定redis监控
  • MyBatis高频面试题
  • C++中那些你不知道的未定义行为
  • 电容在微分、积分电路中的本质以及应用
  • 【系统学习】环境土壤物理模型HYDRUS1D/2D/3D
  • 解决Xshell无法连接Kali Linux 2020.1(2019.3)版本
  • python 基础系列篇:四、编写两个简单的小游戏(猜数字及2048)
  • async与await异步编程
  • MyBatisPlus+SpringBoot实现乐观锁功能
  • 【Vue全家桶】带你全面了解通过Vue CLI初始化Vue项目
  • CSS 属性计算过程
  • 一文了解Jackson注解@JsonFormat及失效解决
  • 全自动托盘四向穿梭车|拥有输送系统提升机AGV的托盘四向穿梭车立体库的软硬件配置系统
  • “你要多弄弄算法”
  • CentOS学习笔记 - 12. Nginx搭建Centos7.5远程repo
  • css布局,左右固定中间自适应实现
  • Docker下部署自己的LNMP工作环境
  • niucms就是以城市为分割单位,在上面 小区/乡村/同城论坛+58+团购
  • OSS Web直传 (文件图片)
  • React 快速上手 - 07 前端路由 react-router
  • 汉诺塔算法
  • 说说动画卡顿的解决方案
  • 通过获取异步加载JS文件进度实现一个canvas环形loading图
  • 微信小程序开发问题汇总
  • [地铁译]使用SSD缓存应用数据——Moneta项目: 低成本优化的下一代EVCache ...
  • NLPIR智能语义技术让大数据挖掘更简单
  • 从如何停掉 Promise 链说起
  • ​软考-高级-信息系统项目管理师教程 第四版【第23章-组织通用管理-思维导图】​
  • (2015)JS ES6 必知的十个 特性
  • (HAL)STM32F103C6T8——软件模拟I2C驱动0.96寸OLED屏幕
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (牛客腾讯思维编程题)编码编码分组打印下标(java 版本+ C版本)
  • (七)MySQL是如何将LRU链表的使用性能优化到极致的?
  • (四)七种元启发算法(DBO、LO、SWO、COA、LSO、KOA、GRO)求解无人机路径规划MATLAB
  • (转)PlayerPrefs在Windows下存到哪里去了?
  • (轉貼) 蒼井そら挑戰筋肉擂台 (Misc)
  • *Algs4-1.5.25随机网格的倍率测试-(未读懂题)
  • .NET 5种线程安全集合
  • .Net 8.0 新的变化
  • .NET Standard / dotnet-core / net472 —— .NET 究竟应该如何大小写?
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .NET开发人员必知的八个网站
  • .NET开源快速、强大、免费的电子表格组件
  • @hook扩展分析
  • [ 手记 ] 关于tomcat开机启动设置问题
  • [1]-基于图搜索的路径规划基础
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [acwing周赛复盘] 第 69 场周赛20220917
  • [BSGS算法]纯水斐波那契数列
  • [COGS 622] [NOIP2011] 玛雅游戏 模拟
  • [Deepin 15] 编译安装 MySQL-5.6.35
  • [Effective C++读书笔记]0012_复制对象时勿忘其每一部分
  • [flask]http请求//获取请求头信息+客户端信息
  • [Flutter]设置应用包名、名称、版本号、最低支持版本、Icon、启动页以及环境判断、平台判断和打包