Ant Design of Vue - 让 Message 组件支持手动点击关闭

环境

"ant-design-vue": "^1.6.3",
"vue": "^2.6.11",

需求

让 antd 的 Message 组件能够手动触发关闭

From

to
在这里插入图片描述


思路

查看 antdv 文档 发现 Message 组件支持使用 VNode 作为显示内容,因此只需要使用 Vue 的 createElement 方法创建带有关闭样式的 VNode 即可。

另外,在全局调用 Message 组件时会返回一个关闭当前 Message 的方法,在需要关闭 Message 时可调用此方法

let _remove = app.$message.error('This is an error message')
// 需要关闭 Message 时调用 _remove()
console.log(_remove)

/**
ƒ result() {
   if (messageInstance) {
      messageInstance.removeNotice(target);
    }
  }
*/

实现

// 方法
const myMessageError = (content, duration, onClose) => {
    let _remove
    // 创建 VNode
    const h = app.$createElement
    let innerText = h('span', { style: { color: '#000000A6' } }, content);
    let innerIcon = h('a-icon', {
      style: { marginRight: '0px', marginLeft: '20px', color: '#ccc', cursor: 'pointer' },
      attrs: { type: 'close' },
      on: { click: () => _remove() }
    })
    let container = h('span', {}, [innerText, innerIcon])
    
    // 调用 Message 组件
     _remove = app.$message.error({
        content: container,
        duration: duration || 0,
        onClose: onClose,
     })
}

// 调用
myMessageError('This is an error message')

补充

  1. 上文仅为 Message 组件的简单运用,并未处理 duration、onClose 参数
  2. Message 组件还支持其他配置,文中并未体现,有兴趣请查阅文档
  3. antd 提供了 Notification 组件,该组件自带关闭功能,视使用场景可选用不同组件

参考

Vue官方文档 - createElement

antdv官方文档 - Message

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值