ElementUI 避免出现多个message同时出现

前端封装axios的时候,通常统一用 Element 的 Message 展示服务器返回的错误或者统一报错信息。由于网络问题或者服务器配置问题,可能某个页面调用多个接口的时候,会同时间出现多条报错信息,这样对用户的体验很不好。所以需要封装一个 message ,使得页面同时间只会出现一个信息框。

// reset-message.js
import { Message } from 'element-ui'

// 避免出现多个报错信息弹窗
let messageInstance = null
const resetMessage = (options) => {
  if (messageInstance) {
    // 先把第一条信息关闭,在弹出第二条信息
    messageInstance.close()
  }
  messageInstance = Message(options)
}

// 重新定义 message.success 等 4个方法
['error', 'success', 'info', 'warning'].forEach(type => {
  resetMessage[type] = options => {
    options = {
      type: type,
      message: options
    }
    return resetMessage(options)
  }
})

export const message = resetMessage
// main.js
import Vue from 'vue'

import ElementUI from 'element-ui'
import 'element-ui/lib/theme-chalk/index.css'
import { message } from './utils/reset-message' // reset message

Vue.use(ElementUI)
// 必须在这行命令后,覆盖 $message 方法
Vue.prototype.$message = message
// request.js 封装axios
import { message } from '@/utils/reset-message' // reset message

service.interceptors.response.use(
	// ..... if error
  message({
    message: res.rmsg || ErrorText,
    type: 'error',
    duration: 2 * 1000
  })
)
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 如果多个对话框出现相同的内容,可能是由于多个对话框共用了同一个组件实例的数据,导致数据在多个对话框中同时更新。解决方法有两种: 1. 每个对话框都使用不同的组件实例。这可以通过在打开对话框时动态创建新的组件实例来实现。示例代码如下: ```javascript import Vue from 'vue' import MyDialog from './MyDialog.vue' // 打开对话框时创建新的组件实例 const dialogInstance = new Vue({ render: h => h(MyDialog) }) dialogInstance.$mount() document.body.appendChild(dialogInstance.$el) // 关闭对话框时销毁组件实例 dialogInstance.$destroy() document.body.removeChild(dialogInstance.$el) ``` 2. 每个对话框都使用独立的数据。这可以通过在组件内部使用局部数据来实现。示例代码如下: ```javascript <template> <el-dialog :visible.sync="visible"> <p>{{ message }}</p> <el-button @click="visible = false">关闭</el-button> </el-dialog> </template> <script> export default { data() { return { visible: false, message: '' } }, methods: { openDialog(message) { this.message = message this.visible = true } } } </script> ``` 在上面的代码中,每个对话框都有独立的 `message` 数据,打开对话框时通过调用 `openDialog` 方法来设置数据。这样可以保证每个对话框都有自己独立的数据,避免出现相同的内容。 ### 回答2: ElementUI是一款基于Vue.js开发的前端UI框架,它提供了丰富的组件库,包括对话框(Dialog)组件。当多个对话框需要显示相同的内容时,我们可以通过以下方法解决: 1. 定义一个公共的数据对象:可以在Vue组件中定义一个公共的数据对象,用于存储对话框的内容。这样所有需要显示相同内容的对话框可以共享这个数据对象,在不同的对话框中同时引用它。这样,当对话框内容发生改变时,所有引用的对话框都会同步更新。 2. 通过插槽(slot)动态传入内容:ElementUI的对话框组件支持插槽功能,可以在对话框组件中定义插槽,然后在使用对话框组件的地方通过插槽传入需要显示的内容。这样,每个对话框可以根据需要传入不同的内容,而不是固定使用相同的内容。 3. 使用全局变量或状态管理工具:如果多个对话框需要动态显示相同的内容,可以考虑使用全局变量或状态管理工具(如Vuex)来管理对话框内容。通过将内容存储在全局变量或状态中,对话框可以通过读取全局变量或状态来获取相同的内容,并实现内容的同步更新。 总之,要解决ElementUI多个对话框出现相同的内容,可以通过定义公共数据对象、使用插槽或全局变量等方法来实现对话框内容的共享和动态更新。根据具体需求和场景选择合适的方法来解决该问题。 ### 回答3: 在elementui中,如果多个对话框出现相同的内容,可以采取以下几种解决方案: 1. 使用组件属性和事件: - 在对话框组件中,通过设置不同的属性,如dialog-title或dialog-message,使每个对话框的标题和内容不同。 - 可以为每个对话框组件设置一个唯一的ID,并在事件函数中通过判断ID来确定执行不同的逻辑。 2. 使用动态数据: - 可以通过在数据中维护一个数组,数组中的每个元素代表一个对话框的内容。 - 在显示对话框时,通过动态绑定数据的方式,将对应索引的内容传递给对话框组件。 - 这样不同的对话框就可以根据不同的索引来显示不同的内容。 3. 使用插槽slot: - 对话框组件通常会提供一些插槽slot,允许在组件内部添加自定义的内容。 - 可以利用插槽slot在每个对话框中添加不同的内容,从而使它们呈现不同的外观和功能。 4. 动态创建对话框: - 可以通过在代码中动态创建对话框的实例来解决相同内容问题。 - 在需要显示对话框的地方,根据需要创建新的对话框实例,并设置对应的内容。 - 这样每个对话框就是独立的实例,不会出现相同内容的问题。 总结来说,解决elementui多个对话框出现相同内容的问题,可以通过设置不同的属性、使用动态数据、插槽slot或者动态创建对话框的方式来区分每个对话框的内容,从而达到解决问题的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值