探索Vue的组件世界-实现Vue插件

文章探讨了Vue框架如何遵循开闭原则,通过提供插件机制和mixin功能实现代码的扩展性。Vue.mixin允许全局注册mixin,影响所有Vue实例,但同名方法的处理可能导致冲突。Vue.use用于安装插件,如Vuex和VueRouter,要求插件提供install方法。在Vue3.0中,这一过程依然适用,强调了正确使用mixin和插件以避免潜在问题的重要性。
摘要由CSDN通过智能技术生成

一个好的框架满足几大设计原则:

开闭原则:对修改源码关闭,对功能扩展开放

vue作为一个优秀的组件框架:满足开闭原则,提供良好的插件机制,以提供三方来扩展功能

Mixin模式

Vue.mixin(mixin)

全局注册的mixin,会影响所有创建的Vue实例。

<template>
  <div>smixin</div>
</template>
<script>
/* eslint-disable no-console */
import Vue from "vue";
const mixin = {
  created: function() { // 1.执行打印
    console.log("mixin created");
  },
  methods: {
    foo: function() {
      console.log("foo");
    },
    conflicting: function() { // 丢失
      console.log("from mixin");
    }
  }
};
Vue.mixin(mixin);
export default {
  created() {// 2.执行打印
    console.log("component created");
    this.conflicting();
  },
  methods: {
    conflicting: function() {// 3.执行打印
      console.log("from components");
    }
  }
};
</script>
  • 同名钩子函数将合并为一个数组,混入对象的钩子将在组件自身钩子之前调用。
  • 二者的methods【方法】、components【组件】和directives【自定义指令】,将被合并为同一个对象。若对象键名冲突时,取组件对象的键值对。

一旦混入方法和组件方法名冲突就很麻烦

所以:水能载舟亦能覆舟,使用Mimin需谨慎

插件

Vue.use(plugin)
@/src/main.js
Vue.use(Vuex);
Vue.use(VueRouter);
Vue.use(ElementUI);

 Vue3.0中截取一段代码

type PluginInstallFunction = (app: App, ...options: any[]) => any
export type Plugin =
| PluginInstallFunction & { install?: PluginInstallFunction }
| {
    install: PluginInstallFunction
}

Vue.use 接收一个函数 或者 提供install方法的对象 作为参数

https://cn.vuejs.org/v2/api/#Vue-use

Vue.use(vuex);

暴露出一个install方法,Vue.use(vuex)是使用install函数安装vuex插件的

 在install函数中如下

 获取单例store

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值