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 相关文章推荐
JavaScript 参考教程
Dec 29 Javascript
各种常用浏览器getBoundingClientRect的解析
May 21 Javascript
javascript中创建对象的三种常用方法
Dec 30 Javascript
Extjs中使用extend(js继承) 的代码
Mar 15 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
Apr 12 Javascript
JavaScript中使用Callback控制流程介绍
Mar 16 Javascript
JS实现可调整倒计时间代码分享
Aug 18 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
Jan 05 Javascript
JS实现兼容各种浏览器的高级拖动方法完整实例【测试可用】
Jun 21 Javascript
JavaScript基于自定义函数判断变量类型的实现方法
Nov 23 Javascript
浅谈Angular7 项目开发总结
Dec 19 Javascript
D3.js的基础部分之数组的处理数组的排序和求值(v3版本)
May 09 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 GUID生成函数和类
2014/03/10 PHP
PHP基于工厂模式实现的计算器实例
2015/07/16 PHP
Ubuntu server 11.04安装memcache及php使用memcache来存储session的方法
2016/05/31 PHP
PHP的mysqli_select_db()函数讲解
2019/01/23 PHP
ThinkPHP5.0框架结合Swoole开发实现WebSocket在线聊天案例详解
2019/04/02 PHP
JavaScript 开发工具webstrom使用指南
2014/12/09 Javascript
JavaScript设计模式之外观模式介绍
2014/12/28 Javascript
浅谈Jquery为元素绑定事件
2015/04/27 Javascript
tuzhu_req.js 实现仿百度图片首页效果
2015/08/11 Javascript
javascript数据结构之双链表插入排序实例详解
2015/11/25 Javascript
jQuery prototype冲突的2种解决方法(附demo示例下载)
2016/01/21 Javascript
ionic2 tabs使用 Modal底部tab弹出框
2016/12/30 Javascript
基于JS代码实现简单易用的倒计时 x 天 x 时 x 分 x 秒效果
2017/07/13 Javascript
详解如何在angular2中获取节点
2017/11/23 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
详解vue 单页应用(spa)前端路由实现原理
2018/04/04 Javascript
基于layui数据表格以及传数据的方式
2018/08/19 Javascript
Webpack4 使用Babel处理ES6语法的方法示例
2019/03/07 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
微信小程序tabBar 返回tabBar不刷新页面
2019/07/25 Javascript
vue源码nextTick使用及原理解析
2019/08/13 Javascript
vue路由守卫,限制前端页面访问权限的例子
2019/11/11 Javascript
javascript设计模式 ? 单例模式原理与应用实例分析
2020/04/09 Javascript
js+for循环实现字符串自动转义的代码(把后面的字符替换前面的字符)
2020/12/24 Javascript
python实现带验证码网站的自动登陆实现代码
2015/01/12 Python
由浅入深讲解python中的yield与generator
2017/04/05 Python
TensorFlow实现卷积神经网络CNN
2018/03/09 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
python实现比较文件内容异同
2018/06/22 Python
对python数据切割归并算法的实例讲解
2018/12/12 Python
python3.6使用SMTP协议发送邮件
2020/05/20 Python
英国家用电器折扣网站:Electrical Discount UK
2018/09/17 全球购物
一家外企的面试题目(C/C++面试题,C语言面试题)
2014/03/24 面试题
《满井游记》教学反思
2014/02/26 职场文书
大型营销活动计划书
2014/04/28 职场文书
基层干部个人对照检查及整改措施
2014/10/28 职场文书