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 相关文章推荐
一个js写的日历(代码部分网摘)
Sep 20 Javascript
图片翻转效果具体实现代码
Jan 09 Javascript
javascript实现汉字转拼音代码分享
Apr 20 Javascript
JS实现点击按钮后框架内载入不同网页的方法
May 05 Javascript
AngularJS变量及过滤器Filter用法分析
Nov 22 Javascript
jQuery制作input提示内容(兼容IE8以上)
Jul 05 jQuery
11行JS代码制作二维码生成功能
Mar 09 Javascript
基于Vue实现拖拽功能
Jul 29 Javascript
Vue2.0学习系列之项目上线的方法步骤(图文)
Sep 25 Javascript
vue日历/日程提醒/html5本地缓存功能
Sep 02 Javascript
在layui框架中select下拉框监听更改事件的例子
Sep 20 Javascript
Vue-drag-resize 拖拽缩放插件的使用(简单示例)
Dec 04 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入门源程序
2006/10/09 PHP
php防注入,表单提交值转义的实现详解
2013/06/10 PHP
PHP empty函数报错解决办法
2014/03/06 PHP
使用Appcan客户端自动更新PHP版本号(全)
2015/07/31 PHP
PHP的PDO操作简单示例
2016/03/30 PHP
PHP 记录访客的浏览信息方法
2018/01/29 PHP
JS仿flash上传头像效果实现代码
2011/07/18 Javascript
JavaScript用JQuery呼叫Server端方法示例代码
2014/09/03 Javascript
使用script的src实现跨域和类似ajax效果
2014/11/10 Javascript
js密码强度校验
2015/11/10 Javascript
JS iFrame加载慢怎么解决
2016/05/13 Javascript
Javascript+CSS3实现进度条效果
2016/10/28 Javascript
利用JS实现文字的聚合动画效果
2017/01/22 Javascript
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
vue + webpack如何绕过QQ音乐接口对host的验证详解
2018/07/01 Javascript
JS实现匀速与减速缓慢运动的动画效果封装示例
2018/08/27 Javascript
解决vue同一slot在组件中渲染多次的问题
2018/09/06 Javascript
微信公众号获取用户地理位置并列出附近的门店的示例代码
2019/07/25 Javascript
关于vue项目中搜索节流的实现代码
2019/09/17 Javascript
纯 JS 实现放大缩小拖拽功能(完整代码)
2019/11/25 Javascript
原生js实现密码强度验证功能
2020/03/18 Javascript
VSCode launch.json配置详细教程
2020/06/18 Javascript
vue-i18n实现中英文切换的方法
2020/07/06 Javascript
Python实现抓取页面上链接的简单爬虫分享
2015/01/21 Python
11月编程语言排行榜 Python逆袭C#上升到第4
2017/11/15 Python
不知道这5种下划线的含义,你就不算真的会Python!
2018/10/09 Python
pytorch实现focal loss的两种方式小结
2020/01/02 Python
纯DOM+CSS3实现简单的小风车动画
2016/09/27 HTML / CSS
网易微博Web App用HTML5开发的过程介绍
2012/06/13 HTML / CSS
Gap中国官网:美式休闲风服饰
2017/02/05 全球购物
VIVOBAREFOOT赤脚鞋:让您的脚做自然的事情
2017/06/01 全球购物
如何强制垃圾回收
2015/10/06 面试题
什么是Rollback Segment
2013/04/22 面试题
公务员群众路线心得体会
2014/11/03 职场文书
关于群众路线的心得体会
2014/11/05 职场文书
2016年清明节红领巾广播稿
2015/12/17 职场文书