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 异步调用框架 (Part 5 - 链式实现)
Aug 04 Javascript
js apply/call/caller/callee/bind使用方法与区别分析
Oct 28 Javascript
图片上传判断及预览脚本的效果实例
Aug 07 Javascript
js实现的常用的左侧导航效果
Oct 17 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
jQuery语法小结(超实用)
Dec 31 Javascript
angularjs之$timeout指令详解
Jun 13 Javascript
讲解vue-router之什么是动态路由
May 28 Javascript
vue项目每30秒刷新1次接口的实现方法
Dec 04 Javascript
JS执行控制之节流模式实例分析
Dec 21 Javascript
JS+canvas五子棋人机对战实现步骤详解
Jun 04 Javascript
javascript canvas实现简易时钟例子
Sep 05 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英文字母大小写转换函数小结
2014/05/03 PHP
Linux系统中为php添加pcntl扩展
2016/08/28 PHP
php实现博客,论坛图片防盗链的方法
2016/10/15 PHP
myEvent.js javascript跨浏览器事件框架
2011/10/24 Javascript
《JavaScript高级程序设计》阅读笔记(一) ECMAScript基础
2012/02/27 Javascript
NodeJs基本语法和类型
2015/02/13 NodeJs
JQuery实现展开关闭层的方法
2015/02/17 Javascript
JavaScript里四舍五入函数round用法实例
2015/04/06 Javascript
jquery判断当前浏览器的实现代码
2015/11/07 Javascript
bootstrap3 兼容IE8浏览器!
2016/05/02 Javascript
Bootstrap组件(一)之菜单
2016/05/11 Javascript
浅谈Webpack下多环境配置的思路
2018/06/27 Javascript
微信小程序中this.data与this.setData的区别详解
2018/09/17 Javascript
详解如何在vue项目中使用eslint+prettier格式化代码
2018/11/10 Javascript
微信小程序常用的3种提示弹窗实现详解
2019/09/19 Javascript
ES2020 已定稿,真实场景案例分析
2020/05/25 Javascript
JQuery Ajax如何实现注册检测用户名
2020/09/25 jQuery
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
python获得图片base64编码示例
2014/01/16 Python
python通过socket查询whois的方法
2015/07/18 Python
详解Python爬虫的基本写法
2016/01/08 Python
修复CentOS7升级Python到3.6版本后yum不能正确使用的解决方法
2018/01/26 Python
Python 中的lambda函数介绍
2018/10/10 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
python打印n位数“水仙花数”(实例代码)
2019/12/25 Python
详解python中各种文件打开模式
2020/01/19 Python
python 安装移动复制第三方库操作
2020/07/13 Python
详解WebSocket跨域问题解决
2018/08/06 HTML / CSS
LA MER海蓝之谜美国官网:传奇面霜
2016/08/27 全球购物
Sunglasses Shop德国站:欧洲排名第一的太阳镜网站
2017/08/01 全球购物
英国领先的瓷砖专家:Walls and Floors
2018/04/27 全球购物
医学生求职自荐信
2013/10/25 职场文书
关于工资低的辞职信
2014/01/14 职场文书
幼儿园大班新学期寄语
2014/01/18 职场文书
四年级语文教学反思
2014/02/05 职场文书
MongoDB数据库部署环境准备及使用介绍
2022/03/21 MongoDB