vue中$message位置调整

需求

项目中使用this.$message写了大量Message提示,此时想修改Message提示距离窗口顶部的距离为200px,查看文档发现需要对Message传入offset参数。

 解决方案一

可以直接全局修改Message提示框的样式,但这种只适用于一次只能弹出一个提示框的情况,如出现多个提示框,则所有提示框会重叠在一块。

public.css

.el-message {
  top: 200px !important;
}
main.js

import 'public.css';
解决方案二

由于提示太多,一个个修改太繁琐,所以选择重写this.$message。

查看element-ui源码怎么写的

['success', 'warning', 'info', 'error'].forEach(type => {
  Message[type] = options => {
    if (typeof options === 'string') {
      options = {
      //options参数只有message一个
        message: options
      };
    }
    options.type = type;
    return Message(options);
  };
});
我们只需要在源码的基础上传入offset参数就好了,代码如下:

main.js

import Vue from 'vue';
import { Message } from 'element-ui';
//定义一个新的Message方法,多传入一个offset参数
const $message = options => {
  return Message({
    ...options,
    offset: 200
  });
};
 
//重写方法,将offset写入options
['success', 'warning', 'info', 'error'].forEach(type => {
  $message[type] = options => {
    if (typeof options === 'string') {
      options = {
        message: options,
        offset: 200
      };
    }
    options.type = type;
    return Message(options);
  };
});
//将$message挂载到this上
Vue.prototype.$message = $message;
//不加这行代码运行this.$message.closeAll时会报错
Vue.prototype.$message.closeAll = Message.closeAll;
拓展内容,控制Message提示每次只能弹出一个

main.js

import Vue from 'vue';
import { Message } from 'element-ui';
//定义一个新的Message方法
let messageInstance = null;
const $message = options => {
    if(messageInstance) {
    //判断是否有提示框,有则关闭
        messageInstance.close();
    }
    messageInstance = Message(options);
    return messageInstance;
};
 
//重写方法
['success', 'warning', 'info', 'error'].forEach(type => {
    $message[type] = options => {
        if (typeof options === 'string') {
            options = {
                message: options
            };
        }
        options.type = type;
        return Message(options);
    };
});
//将$message挂载到this上
Vue.prototype.$message = $message;
Vue.prototype.$message.closeAll = Message.closeAll
————————————————
版权声明:本文为CSDN博主「卿本无忧」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_39998026/article/details/122193987

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
根据引用\[1\]和引用\[2\]的内容,你提到的问题是关于this.$message报错的。根据引用\[1\]的代码,这是一段使用Vue框架的this.$message方法来显示错误信息的代码。而根据引用\[2\]的描述,这个报错可能是因为在某些情况下,提示信息会被弹框遮住,导致显示不明显。根据这些信息,我可以给出以下回答: this.$message报错可能是因为在某些情况下,提示信息被弹框遮住,导致显示不明显。为了解决这个问题,可以考虑以下两种解决方案:\[2\] 1. 调整提示信息的显示位置:可以通过修改CSS样式或者调整弹框的层级来确保提示信息在弹框之上显示,从而避免被遮住。 2. 使用其他提示方式:如果提示信息的显示位置无法调整,可以考虑使用其他方式来提示用户,比如在页面的其他位置显示提示信息,或者使用弹出框的方式来显示错误信息。 希望以上回答能够解决你的问题。如果还有其他疑问,请随时提问。 #### 引用[.reference_title] - *1* [手动点击关闭 ElementUI Message 或 this.$message 消息提示](https://blog.csdn.net/m0_60553023/article/details/127849949)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [TypeError: this.$message is not a function报错情况解决](https://blog.csdn.net/weixin_45717984/article/details/124823942)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值