0%

vue-notification + mini-toastr 消息提示功能如何挂载到全局?

前言

最近的 coreui/vue 后台管理的项目中默认引入的是 vue-notification + mini-toastr 的消息提示,使用起来比着 element ui 麻烦一些,一开始翻了文档也没找到如何定义到全局。就每个文件重复定义。直到这两天突然有了灵感给解决了。

main.js 中初始化

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import VueNotifications from "vue-notifications";
import miniToastr from "mini-toastr"; // https://github.com/se-panfilov/mini-toastr

// notifications
const toastTypes = {
success: "success",
error: "error",
info: "info",
warn: "warn"
};
miniToastr.init({ types: toastTypes });
function toast({ type, message, title, timeout, cb }) {
return miniToastr[type](message, title, timeout, cb);
}
const options = {
success: toast,
error: toast,
info: toast,
warn: toast
};
// VueNotifications.setPluginOptions(options)
Vue.use(VueNotifications, options);

单文件引入

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
notifications: {
showSuccessMsg: {
type: "success",
message: "success!"
},
showErrorMsg: {
type: "error",
message: "error"
}
},
methods: {
onSubmit() {
if (Object.values(this.goodsData).indexOf("") !== -1) {
this.showErrorMsg({ message: "有必填项为空" });
return;
}
if (this.goodsData.files.length === 0) {
this.showErrorMsg({ message: "请至少上传一张图片" });
return;
}
// .......
}
}

可以看到每个页面引入还是挺麻烦的。

挂载到全局

定义:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
const vm = new Vue({
el: "#app",
router,
template: "<App/>",
components: {
App
},
notifications: {
showSuccessMsg: {
type: "success",
message: "success!"
},
showErrorMsg: {
type: "error",
message: "error"
},
showInfoMsg: {
type: "info",
message: "info"
}
}
});
// 将 VueNotifications 挂载给全局, vm 实例上有消息提示方法
Vue.prototype.$notice = vm

使用:

1
2
3
4
5
methods: {
getMenus() {
this.$notice.showInfoMsg({ message: "菜单获取成功,$notice test" });
}
}

这两天终于解决了这个问题,记录一下。可能有更简便的用法,有时间再研究下文档。哈哈哈