日常开发过程中封装了一些通用的公共组件,但是每次调用时不想引入组件结构,这时候就需要挂载到vue上供所有的实例用类似方法的形式调用,所以需要对组件进行注册。

假设我们封装一个公共组件confirm.vue,

然后我们把它挂载到vue上:

import Confirm from "./confirm";
export default {
  install(Vue) {
    function confirm(data = {}) {
      const { confirm, cancel, close, ...restProps } = data;
      const ConfirmConstructor = Vue.extend(Confirm);
      const instance = new ConfirmConstructor({
        el: document.createElement("div"),
        propsData: {
          ...restProps,
        },
      });
      if (confirm) {
        instance.$on("confirm", confirm);
      }
      if (cancel) {
        instance.$on("cancel", cancel);
      }
      document.querySelector("body").appendChild(instance.$el);
    }

    Vue.prototype.$confirm = confirm;

    return confirm;
  },
};

这时候我们就可以用方法调用了:

this.$confirm({
    title: "自定义标题",
    message: "自定义消息",
    cancelText: "cancel",
    confirmText: "ok",
    confirm: () => {
       alert("confirm");
    },
    cancel: () => {
       alert("cancel");
    },
});

 

posted on 2019-07-27 17:27  hmyCheryl  阅读(5301)  评论(0编辑  收藏  举报