Vue3组件库-消息提示组件

举报
vike 发表于 2021/10/29 17:15:34 2021/10/29
【摘要】 Vue3组件库-消息提示组件简易消息提示自定义消息提示函数调用消息提示 简易消息提示效果预览先在App.vue 文件里 引入写好的Button组件新建一个Snackbar.vue作为组件的文件给button添加click事件,通过show属性控制消息提示框的显示与隐藏注意点:show前面增加了v-model 这是为了在组件里修改props接收到show的值props里的属性是单向数据 不能...

Vue3组件库-消息提示组件

  • 简易消息提示
  • 自定义消息提示
  • 函数调用消息提示
简易消息提示
  • 效果预览

image-20210819154029931.png

  • 先在App.vue 文件里 引入写好的Button组件

  • 新建一个Snackbar.vue作为组件的文件

  • 给button添加click事件,通过show属性控制消息提示框的显示与隐藏

  • 注意点:

    • show前面增加了v-model 这是为了在组件里修改props接收到show的值
    • props里的属性是单向数据 不能直接更改
     <simplebutton type="primary" block @click="show = !show">显示时长</simplebutton>
      <simplesnackbar v-model:show="show">这是一个消息条!!</simplesnackbar>
    <script setup>
    import simplebutton from "./components/Button.vue";
    import simplesnackbar from "./components/Snackbar.vue";
    import {ref} from 'vue'
    const show = ref(false)
    </script>
    
  • 基础组件实现

    • 外部传入字符串,内部放一个默认插槽用于接收显示
    • 给一个基础样式 消息提示框通常在页面右上角 可以用position定位实现
    <div>
        <div
          class="simple-snackbar">
         <slot></slot>
        </div>
      </div>
    <style>
      .simple-snackbar {
      width: 200px;
      padding: 10px;
      background-color: #333;
      color: rgba(255, 255, 255, 0.87);
      border-radius: 3px;
      position: absolute;
      top: 0;
      right: 0;
    }
    </style>
    
  • 基础组件逻辑实现

    • 通过传入的show参数进行判断

    • 引入vue中watch函数 观察props值的变化,show为true即可执行定时器 将组件显示3秒再隐藏

    • 组件隐藏应该把show置为false,直接修改不生效

    • 引入vue中defineEmits方法,定义一个"update:show"方法,在定时器执行时调用方法并传入值

    • change()方法为定时器 定义一个query变量设置为none和block以此控制显示隐藏

      import { defineProps, ref, watch, defineEmits, useSlots } from "vue";
      const props = defineProps({
        show: Boolean
      });
      watch(props, (newProps) => {
        newProps.show ? changes() : (query.value = "none");
      });
      
自定义消息提示
  • 效果预览

image-20210819160530528.png

  • 自定义消息提示增加了一个action具名插槽可供添加内容

  • 引入Button组件 并添加show= !show事件可达到关闭效果

  • App.vue内容

    <simplebutton type="primary" block @click="show = !show">垂直排列</simplebutton>
      <simplesnackbar v-model:show="show">这是一个消息条!!
        <template #action>
        <simplebutton type="primary"  @click="show = !show">关闭</simplebutton>
      </template>
      </simplesnackbar>
    
  • 把action插槽外包裹一个div 加上样式 实现靠右显示

    • 注意点:

      • 如果使用position: absolute;定位实现,需要给父元素加上高度 不然会有高度塌陷问题
      • 加上高度 元素不能实现自适应
函数调用组件
  • 实现通过createSnackbar(‘这是一条消息’)来直接在页面显示组件 只适用于简单组件

  • 先创建一个createSnackbar.js文件并导出

  • 创建一个createSnackbar函数 并接收一个外部传入的data值

  • 引入createApp 和组件文件 createApp是vue创建实例的函数

    import {createApp} from 'vue'
    import simplesnackbar from './Snackbar.vue'
    function createSnackbar (data) {
        let message,duration
        //判断传进来的参数是对象还是字符串
        typeof data == "object" ? {message,duration} = data : message = data
        let show = true
        //创建组件实例 并把props属性传入组件
        let snackbar = createApp(simplesnackbar, {
            message,
            duration,
            show,
        })
        //创建一个元素 插入到body中
        let divElement = document.createElement('div')
        document.body.appendChild(divElement)
        //元素挂载  
        snackbar.mount(divElement)
    }
    export default createSnackbar;
    
  • 在App.js中调用即可

    createSnackbar('这是一条消息')
    
函数调用函数

image-20210819163840402.png

  • 通过不同的方法显示不同颜色的消息提示框

  • 直接在createSnackbar函数外增加属性 传入一个type值 用来控制css样式显示

    createSnackbar.success = function(data){
        createSnackbar(data,'success')
    }
    createSnackbar.info = function(data){
        createSnackbar(data,'info')
    }
    
  • 即可实现不同的消息框样式
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。