【element-ui】messageBox弹窗提示消息换行问题。

本文介绍如何使用 Element UI 的 MessageBox 组件展示多行错误提示信息。通过将后台返回的错误信息转换为数组并利用 Vue 的 $createElement 方法,实现自定义格式的多行错误消息对话框。

本文代码引用自element官网demo自定义messageBox。

首先看一下不换行的效果图:



然后直接上代码。

var Main = {
    methods: {
      open4() {
      //1.我们要将后台返回的数据转存成数组,格式为: data=['错误提示一!!!','错误提示二!!!','错误提示三!!!'];
      let data = ['错误提示一!!!','错误提示二!!!','错误提示三!!!'];
     //2.新建newDatas数组
      let newDatas = [];
      const h = this.$createElement;
     //3.通过循环data数组,调用h方法,将每项值传给h,h('标签名',样式,具体内容)
      for(let i in data){
     //4.将data数据push进newDatas数组中
      	newDatas.push(h('p',null,data[i]));
      };
        this.$msgbox({
          title: '消息',
      //5.将newDatas传进h方法生成的代码格式为:
      // <div>
      //      <p>错误提示一!!!</p>
      //      <p>错误提示二!!!</p>
      //      <p>错误提示三!!!</p>
      // </div>
          message: h('div',null, newDatas),
          showCancelButton: true,
          confirmButtonText: '确定',
          cancelButtonText: '取消',
        }).then(action => {
          this.$message({
            type: 'info',
            message: 'action: ' + action
          });
        });
      },
      
    }
  }
var Ctor = Vue.extend(Main)
new Ctor().$mount('#app')

总共分为5步:

      1.将后台返回的数据转存成数组,格式为: data=['错误提示一!!!','错误提示二!!!','错误提示三!!!'];

      2.新建newDatas数组;

      3.通过循环data数组,调用h方法,将每项值传给h,h('标签名',样式,具体内容);

      4.将data数据push进newDatas数组中;

      5.message:h('div',null,newDatas)将newDatas传进h方法中。

最后实现换行后的效果图:

在使用 Element UI 的 `MessageBox` 时,如果在组件中调用了 `this.$confirm` 或 `this.$prompt` 等方法,并且在某些情况下需要多次调用,可能会遇到内容未清空的问题。例如,前一次调用中输入了内容或选择了选项,而下一次调用时这些状态仍然保留,这可能影响用户体验。 ### 问题分析 Element UI 的 `MessageBox` 是基于 Vue 实现的组件,其内部状态在调用时会保留,特别是在使用 `this.$prompt` 这类方法时,输入框的值可能会被缓存。这是因为 `MessageBox` 实例并未在每次调用时重新创建,而是复用了之前的实例。 ### 解决方案 一种有效的方式是在每次调用 `MessageBox` 前手动重置其内部状态。可以通过在调用 `this.$confirm` 或 `this.$prompt` 时,显式地设置默认值为空或重置相关状态变量。 例如,在调用 `this.$prompt` 之前,可以将输入框的初始值设置为空字符串: ```javascript this.$prompt('请输入内容', '提示', { inputValue: '', // 显式清空输入框 confirmButtonText: '确定', cancelButtonText: '取消' }).then(({ value }) => { // 处理输入值 }).catch(() => { // 取消操作 }); ``` 此外,如果需要在多个地方复用该逻辑,可以将 `MessageBox` 的配置封装成一个独立的方法,并在每次调用时确保状态重置: ```javascript showPromptDialog(defaultValue = '') { return this.$prompt('请输入内容', '提示', { inputValue: defaultValue, confirmButtonText: '确定', cancelButtonText: '取消' }).catch(() => { // 可选:处理取消逻辑 }); } ``` 通过这种方式,可以在每次调用时传入新的默认值,从而避免内容残留的问题。 ### 自定义封装以避免状态残留 如果频繁使用 `MessageBox` 并希望统一处理逻辑,可以参考引用中的思路,将 `MessageBox` 封装为一个可配置的组件或工具方法,确保每次调用时都能重置状态[^2]。例如: ```javascript function resetMessageBox() { return { prompt(options) { const defaultOptions = { inputValue: '', ...options }; return this.$prompt(defaultOptions); } }; } ``` 通过这种方式,可以确保每次调用时都使用干净的状态,从而避免内容残留问题---
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值