Skip to content

Notification

悬浮出现在页面角落,显示全局的通知提醒消息。

演示

基本用法
通知内容message支持string和render函数
<template>
  <div class="rows">
    <cl-button plain @click="open1"> render函数 </cl-button>
    <cl-button plain @click="open2"> string </cl-button>
  </div>
</template>

<script lang="ts" setup>
import { h } from 'vue'
import { ClNotification } from '@kirkw/carol-ui'

const open1 = () => {
  ClNotification({
    title: '提示',
    message: h('i', { style: 'color: orange' }, '我是render函数'),
    footerInfo: h('i', { style: 'color: orange' }, '我是footer')
  })
}

const open2 = () => {
  ClNotification({
    title: '提示',
    message: '我是string'
  })
}
</script>
<style lang="scss">
.rows {
  .cl-button {
    margin-right: 8px;
  }
}
</style>
是否自动关闭
duration为0则是默认不关闭
<template>
  <div class="rows">
    <cl-button plain @click="open1"> 自动关闭 </cl-button>
    <cl-button plain @click="open2"> 不自动关闭</cl-button>
  </div>
</template>

<script lang="ts" setup>
import { ClNotification } from '@kirkw/carol-ui'

const open1 = () => {
  ClNotification({
    title: '提示',
    message: '我默认3秒关闭'
  })
}

const open2 = () => {
  ClNotification({
    title: '提示',
    message: '我不会自动关闭',
    duration: 0
  })
}
</script>
<style lang="scss">
.rows {
  .cl-button {
    margin-right: 8px;
  }
}
</style>
带有倾向性
带有 icon,常用来显示「成功、警告、消息、错误」类的系统消息
<template>
  <div class="rows">
    <cl-button plain @click="open1"> 成功 </cl-button>
    <cl-button plain @click="open2"> 警告 </cl-button>
    <cl-button plain @click="open3"> 消息 </cl-button>
    <cl-button plain @click="open4"> 错误 </cl-button>
  </div>
</template>

<script lang="ts" setup>
import { ClNotification } from '@kirkw/carol-ui'

const open1 = () => {
  ClNotification({
    title: '成功标题不超过10个字',
    message: '这是一条成功的提示消息',
    type: 'success'
  })
}

const open2 = () => {
  ClNotification({
    title: '警告',
    message: '这是一条警告的提示消息',
    type: 'warning'
  })
}

const open3 = () => {
  ClNotification.info({
    title: '消息',
    message: '这是一条消息提示'
  })
}

const open4 = () => {
  ClNotification.error({
    title: '错误',
    message: '这是一条错误的提示消息'
  })
}
</script>
<style lang="scss">
.rows {
  .cl-button {
    margin-right: 8px;
  }
}
</style>
自定义弹出位置
可以让 Notification 从屏幕四角中的任意一角弹出
<template>
  <div class="rows">
    <cl-button plain @click="open1"> 右上角 </cl-button>
    <cl-button plain @click="open2"> 右下角 </cl-button>
    <cl-button plain @click="open3"> 左下角 </cl-button>
    <cl-button plain @click="open4"> 左上角 </cl-button>
  </div>
</template>

<script lang="ts" setup>
import { ClNotification } from '@kirkw/carol-ui'

const open1 = () => {
  ClNotification({
    title: '自定义位置',
    message: '右上角弹出的消息'
  })
}

const open2 = () => {
  ClNotification({
    title: '自定义位置',
    message: '右下角弹出的消息',
    position: 'bottom-right'
  })
}

const open3 = () => {
  ClNotification({
    title: '自定义位置',
    message: '左下角弹出的消息',
    position: 'bottom-left'
  })
}

const open4 = () => {
  ClNotification({
    title: '自定义位置',
    message: '左下角弹出的消息',
    position: 'top-left'
  })
}
</script>
<style lang="scss">
.rows {
  .cl-button {
    margin-right: 8px;
  }
}
</style>
自定义底部 | 自定义icon
底部可以自定义例如去跳转|可直接送进来icon属性
<template>
  <div class="rows">
    <cl-button plain @click="open1"> 自定义底部 </cl-button>
    <cl-button plain @click="open2"> 自定义icon </cl-button>
    <cl-button plain @click="open3"> 超出滚动 </cl-button>
    <cl-button plain @click="open4"> 全局方法 </cl-button>
  </div>
</template>

<script lang="ts" setup>
import { getCurrentInstance, onMounted, ref } from 'vue'
import { ClNotification } from '@kirkw/carol-ui'
// todo 获取不到挂载的全局方法
const instance = getCurrentInstance()
const $clNotify = instance?.appContext.config.globalProperties.$clNotify

const open1 = () => {
  ClNotification({
    title: '提示',
    message: '<span style="color: red">我是自定义底部的消息</span>',
    dangerouslyUseHTMLString: true,
    footerInfo: '<button style="color:#fff;background:#2080f0;padding:0 8px">操作<button>',
    beforeClose: function () {
      console.log('我是关闭前的回调')
    }
  })
}

const open2 = () => {
  ClNotification({
    message: '这是一个没有title自定义icon的提示消息',
    iconName: 'cl-icon-loading'
  })
}

const open3 = () => {
  ClNotification({
    title: '提示',
    message:
      '超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动超出滚动'
  })
}

const open4 = () => {
  $clNotify({
    title: '提示',
    message: '全局方法 $notify'
  })
}
</script>
<style lang="scss">
.rows {
  .cl-button {
    margin-right: 8px;
  }
}
</style>

message footerInfo 属性虽然支持传入 HTML/JSX,但是在网站上动态渲染任意 HTML 是非常危险的,因为容易导致 XSS 攻击。因此在使用的情况下,请确保 message footerInfo 的内容是可信的,永远不要将用户提交的内容赋值给 message footerInfo 属性。

API

Notification Props

名称类型默认值可选值描述
customClassstring自定义组件名
idstring自定义组件ID
dangerouslyUseHTMLStringbooleanfalsetrue/false是否支持传入HTML片段)
durationnumber3000关闭弹窗的时间,0则不自动关闭
typestringsuccess error info warning带有倾向性的弹窗
icon属性string自定义的icon
titlestringtitle
messagestring vnodecontent
footerInfostring vnodefooter
positionstringtop-right'top-right', 'top-left', 'bottom-right', 'bottom-left'弹出的方位
offsetnumber距离position的边距
showClosebooleantrue是否展示关闭按钮
z-indexnumber2000可自动设置层级
contentHeightnumber内容区域的高度 超过滚动
onCloseFunction关闭时的回调函数
beforeCloseFunction关闭前的回调函数

Notification 方法

名称详情类型
close关闭当前的notificationfunction
closeAll关闭所有的notificationfunction