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实现的完美渐变弹出层效果代码
Apr 02 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
Jun 25 Javascript
JavaScript 数组详解
Oct 10 Javascript
jquery ajaxSubmit 异步提交的简单实现
Feb 28 Javascript
jquery 显示*天*时*分*秒实现时间计时器
May 07 Javascript
打造个性化的功能强大的Jquery虚拟键盘(VirtualKeyboard)
Oct 11 Javascript
js控制div弹出层实现方法
May 11 Javascript
不同js异步函数同步的实现方法
May 28 Javascript
JavaScript实现时间倒计时跳转(推荐)
Jun 28 Javascript
js构造函数创建对象是否加new问题
Jan 22 Javascript
javascript与PHP动态往类中添加方法对比
Mar 21 Javascript
Angular6 发送手机验证码按钮倒计时效果实现方法
Jan 08 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
phplist及phpmailer(组合使用)通过gmail发送邮件的配置方法
2016/03/30 PHP
JavaScript之HTMLCollection接口代码
2011/04/27 Javascript
jquery 回车事件实现代码
2011/08/23 Javascript
jQuery-onload让第一次页面加载时图片是淡入方式显示
2012/05/23 Javascript
js定时器怎么写?就是在特定时间执行某段程序
2013/10/11 Javascript
js类式继承的具体实现方法
2013/12/31 Javascript
javascript的propertyIsEnumerable()方法使用介绍
2014/04/09 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
js匿名函数作为函数参数详解
2016/06/01 Javascript
setTimeout函数的神奇使用
2017/02/26 Javascript
微信小程序 wx:for的使用实例详解
2017/04/27 Javascript
微信小程序如何获知用户运行小程序的场景教程
2017/05/17 Javascript
vue实现一个移动端屏蔽滑动的遮罩层实例
2017/06/08 Javascript
安装Node.js并启动本地服务的操作教程
2018/05/12 Javascript
jquery获取元素到屏幕四周可视距离的方法
2018/09/05 jQuery
Vue中的methods、watch、computed的区别
2018/11/26 Javascript
JavaScript实现字符串与HTML格式相互转换
2020/03/17 Javascript
Python变量和字符串详解
2017/04/29 Python
python数据抓取分析的示例代码(python + mongodb)
2017/12/25 Python
python实现黑客字幕雨效果
2018/06/21 Python
使用python将mysql数据库的数据转换为json数据的方法
2019/07/01 Python
python实现将两个文件夹合并至另一个文件夹(制作数据集)
2020/04/03 Python
10行Python代码实现Web自动化管控的示例代码
2020/08/14 Python
html5实现多图片预览上传及点击可拖拽控件
2018/03/15 HTML / CSS
Java面试中常遇到的问题,也是需要注意的几点
2013/08/30 面试题
全国道德模范事迹
2014/02/01 职场文书
竞赛口号大全
2014/06/16 职场文书
财务部副经理岗位职责范本
2014/06/17 职场文书
机电系毕业生求职信
2014/07/11 职场文书
放飞梦想演讲稿200字
2014/08/26 职场文书
国际残疾人日广播稿范文
2014/10/09 职场文书
机关干部三严三实心得体会
2014/10/13 职场文书
合伙开公司协议书范本
2014/10/28 职场文书
护士年终考核评语
2014/12/31 职场文书
听证会主持词
2015/07/03 职场文书
Linux磁盘管理方法介绍
2022/06/01 Servers