vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知


Posted in Javascript onAugust 17, 2019

vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知

使用element-ui中的Notification,只有一个message属性是有很大的操作空间,其余的都是写死的,无法进行扩展,达不到想要的效果。所以只能在message上下功夫。

在element-ui官方文档中可以看到Notification中的message属性是可以处理VNode的所以我们可以使用VNode来达到我们需要的效果。

如何关闭通知呢?

当创建通知的时候,会返回该通知的实例,通过该实例的close方法可以将通知关闭。

那么当有多个通知显示在屏幕上时,如何关闭特定弹窗的呢?

创建一个字典,字典的key是message的Id,value是显示该消息的通知的实例。从而可以关闭特定的通知。代码如下。

import mainTable from './mixin/mainTable';
import systemMenu from './template/system-menu';
import headerRow from './template/header';
export default {
  name: 'xxxxx',
  data() {
    return {
      //使用messageId作为弹窗的key,用来获取弹窗的实例,以对对应弹窗进行操作
      notifications: {}
    };
  },
  mounted() {
    this.$messageWebsocket.websocketApi.initWebSocket(this.$store.state.login.userInfo.userInfo.id, this.openMessageTips);
  },
  methods: {
    //关闭单个通知
    closeNotification(id, operateCode, message){
      this.notifications[message.messageId].close();
      delete this.notifications[message.messageId];
    },
    //关闭所有通知
    closeAllNotification(){
      let _this = this;
      for (let key in _this.notifications) {
        _this.notifications[key].close();
        delete _this.notifications[key];
      }
    },
    //打开一个新的通知
    openMessageTips(message){
      let _this = this;
      this.closeAllNotification();
      let notify = this.$notify({
        title: '三高协诊消息',
        position: 'bottom-right',
        showClose: false,
        dangerouslyUseHTMLString: true,
        message: this.$createElement('div', null,
          [
            this.$createElement('div', null, [this.$createElement('span', null, message.content)]),
            this.$createElement('div', null,
              [
                this.$createElement(
                  'button',
                  {
                    style: {
                      padding: '10px 18px',
                      margin: '10px 12px 0px 2px',
                      textAlign: 'center',
                      textDecoration: 'none',
                      display: 'inline-block',
                      webkitTransitionDuration: '0.4s',
                      transitionDuration: '0.4s',
                      cursor: 'pointer',
                      backgroundColor: 'white',
                      color: 'black',
                      border: '2px solid #e7e7e7',
                    },
                    on: {
                      mouseout: function(e){
                        e.target.style.backgroundColor = 'white';
                      },
                      mouseover: function(e){
                        e.target.style.backgroundColor = '#e7e7e7'
                      },
                      click: _this.closeNotification.bind(_this, 1, 1, message)
                    }
                  },
                  "查看"
                ),
                this.$createElement(
                  'button',
                  {
                    style: {
                      padding: '10px 18px',
                      margin: '10px 2px 0px 12px',
                      textAlign: 'center',
                      textDecoration: 'none',
                      display: 'inline-block',
                      webkitTransitionDuration: '0.4s',
                      transitionDuration: '0.4s',
                      cursor: 'pointer',
                      backgroundColor: 'white',
                      color: 'black',
                      border: '2px solid #e7e7e7',
                    },
                    on: {
                      //鼠标移出的回调
                      mouseout: function(e){
                        e.target.style.backgroundColor = 'white';
                      },
                      //鼠标移入的回调
                      mouseover: function(e){
                        e.target.style.backgroundColor = '#e7e7e7'
                      },
                      click: _this.closeNotification.bind(_this, 1, 2, message)
                    }
                  },
                  "稍后提醒(五分钟后)"
                )
              ]
            )
          ]
        ),
        duration: 0,
      });
      //将messageId和通知实例放入字典中
      this.notifications[message.messageId] = notify;
    }
  }
};

总结

以上所述是小编给大家介绍的vue 使用element-ui中的Notification自定义按钮并实现关闭功能及如何处理多个通知,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

Javascript 相关文章推荐
用cssText批量修改样式
Aug 29 Javascript
用jquery实现学校的校历(asp.net+jquery ui 1.72)
Jan 01 Javascript
再谈javascript图片预加载技术(详细演示)
Mar 12 Javascript
jQuery把表单元素变为json对象
Nov 06 Javascript
javascript 实现子父窗体互相传值的简单实例
Feb 17 Javascript
jquery 实现两Select 标签项互调示例代码
Sep 25 Javascript
JavaScript中的ubound函数使用实例
Nov 04 Javascript
JavaScript中继承用法实例分析
May 16 Javascript
jQuery动态添加
Apr 07 Javascript
jquery对象访问是什么及使用方法介绍
May 03 Javascript
原生js仿jquery实现对Ajax的封装
Oct 04 Javascript
Vue入门之数量加减运算操作示例
Dec 11 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
Aug 17 #Javascript
微信小程序移动拖拽视图-movable-view实例详解
Aug 17 #Javascript
微信小程序框架的页面布局代码
Aug 17 #Javascript
vue实现滑动到底部加载更多效果
Oct 27 #Javascript
vue实现页面滚动到底部刷新
Aug 16 #Javascript
vue-mugen-scroll组件实现pc端滚动刷新
Aug 16 #Javascript
JavaScript的查询机制LHS和RHS解析
Aug 16 #Javascript
You might like
php设计模式 Bridge (桥接模式)
2011/06/26 PHP
php设计模式之命令模式的应用详解
2013/05/21 PHP
PHP读取配置文件类实例(可读取ini,yaml,xml等)
2015/07/28 PHP
通过源码解析Laravel的依赖注入
2018/01/22 PHP
php实现构建排除当前元素的乘积数组方法
2018/10/06 PHP
javascript中的array数组使用技巧
2010/01/31 Javascript
js+csss实现的一个带复选框的下拉框
2014/09/29 Javascript
javascript模拟php函数in_array
2015/04/27 Javascript
jquery实现清新实用的网页菜单效果
2015/08/28 Javascript
简单分析javascript中的函数
2016/09/10 Javascript
利用fecha进行JS日期处理
2016/11/21 Javascript
js实现简单的手风琴效果
2017/02/27 Javascript
ES6新特性三: Generator(生成器)函数详解
2017/04/21 Javascript
基于Jquery Ajax type的4种类型(详解)
2017/08/02 jQuery
基于LayUI分页和LayUI laypage分页的使用示例
2017/08/02 Javascript
简单的Vue异步组件实例Demo
2017/12/27 Javascript
JS与jQuery判断文本框还剩多少字符可以输入的方法
2018/09/01 jQuery
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
详解Vue源码学习之双向绑定
2019/04/10 Javascript
python局域网ip扫描示例分享
2014/04/03 Python
Python列表切片操作实例总结
2019/02/19 Python
python lxml中etree的简单应用
2019/05/10 Python
Python如何使用k-means方法将列表中相似的句子归类
2019/08/08 Python
python命令 -u参数用法解析
2019/10/24 Python
python通过移动端访问查看电脑界面
2020/01/06 Python
Django 多对多字段的更新和插入数据实例
2020/03/31 Python
Python爬虫JSON及JSONPath运行原理详解
2020/06/04 Python
用opencv给图片换背景色的示例代码
2020/07/08 Python
迪卡侬荷兰官网:Decathlon荷兰
2017/10/29 全球购物
LG西班牙网上商店:Tienda LG Online Es
2019/07/30 全球购物
俄罗斯香水在线商店:AromaCode
2019/12/04 全球购物
消防安全标语
2014/06/07 职场文书
支部组织生活会方案
2014/06/10 职场文书
公司人事任命通知
2015/04/20 职场文书
2015年支教教师工作总结
2015/07/22 职场文书
八年级物理教学反思
2016/02/19 职场文书