Vue项目中按需引入ElementUI组件库以及Message的二次封装

130 阅读1分钟

Vue项目中按需引入ElementUI组件库以及Message的二次封装

1. 动态引入ElementUI组件

import {
  Menu,
  MenuItem,
  Submenu,
  Input,
  Carousel,
  CarouselItem,
  Button,
  Row,
  Col,
  Tabs,
  TabPane,
  Dropdown,
  DropdownItem,
  DropdownMenu,
  Rate,
  Dialog,
  Form,
  FormItem,
  Badge,
  Table,
  TableColumn,
  Pagination,
  Loading,
  Tooltip,
} from "element-ui";
const comps = [
  Menu,
  MenuItem,
  Submenu,
  Input,
  Carousel,
  CarouselItem,
  Button,
  Row,
  Col,
  Tabs,
  TabPane,
  Dropdown,
  DropdownItem,
  DropdownMenu,
  Rate,
  Dialog,
  Form,
  FormItem,
  Badge,
  Table,
  TableColumn,
  Pagination,
  Tooltip,
];

export default {
  install(Vue) {
    comps.map((c) => {
      Vue.component(c.name, c);
    });
    // 单独引入Loading组件
    Vue.use(Loading);
    Vue.use(Loading.directive);
  },
};
import Vue from "vue";
import App from "./App.vue";
import element from "./plugins/element";
import "element-ui/lib/theme-chalk/index.css";

Vue.use(element);

Vue.config.productionTip = false;

new Vue({
  render: (h) => h(App),
}).$mount("#app");

2. 二次封装Message

解决message多次出现的问题

/**
 * 二次封装message 避免多个消息提示同时出现
 */
import { Message } from "element-ui";
let messageInstance = null;
const resetMessage = (options) => {
  if (messageInstance) {
    messageInstance.close();
  }
  messageInstance = Message(options);
};
["error", "success", "info", "warning"].forEach((type) => {
  resetMessage[type] = (options) => {
    if (typeof options === "string") {
      options = {
        message: options,
      };
    }
    options.type = type;
    return resetMessage(options);
  };
});
export const message = resetMessage;
import { MessageBox} from "element-ui";

import { message } from "./message";
  

export default {
  install(Vue) {
    Vue.prototype.$message = message;
    Vue.prototype.$confirm = MessageBox.confirm;
  },
};