关于扩展Element组件库的一些思考

2020-03-26  本文已影响0人  为了鱼丸

ElementUI是所有Vue组件库中比较优秀的一个,至今已经在github收获了44.3k个star,公司几乎所有的Vue项目都是使用ElementUI作为基础组件库,其丰富的组件足以应付大部分交互场景,但是碰到特殊的需求组件库内的组件没法满足应用场景我们该怎么办呢?这个时候就需要我们动手扩展当前的组件库来满足我们的应用场景。

扩展组件库可能遇到的问题

试想这样一个场景,现在项目中要用到日期范围组件,要求开始日期和结束日期可以分别选择,并且能够对某些日期进行禁用,组件库里面并没有这样的组件,你会怎样实现这样的需求?

export default {
    inject: {
      elForm: {
        default: ''
      },
      elFormItem: {
        default: ''
      }
    },

    computed: {
      _elFormItemSize() {
        return (this.elFormItem || {}).elFormItemSize;
      },
      validateState() {
        return this.elFormItem ? this.elFormItem.validateState : '';
      },
      needStatusIcon() {
        return this.elForm ? this.elForm.statusIcon : false;
      },
      inputSize() {
        return this.size || this._elFormItemSize || (this.$ELEMENT || {}).size;
      },
      inputDisabled() {
        return this.disabled || (this.elForm || {}).disabled;
      },
   },

我们可以从父级组件拿到表单的状态,比如大小,是否禁用

MyComponent.install = function(Vue,options){
     Vue.component(MyComponent,MyComponent.name)
}
export default MyComponent

我们可以这样使用

Vue.use(MyComponent,options)

结语

扩展组件开发,需要特别熟悉组件的用法,有些需要深入源码了解原理,根据原理制定开发方案,在探索的过程中,我们会遇到很多问题,这时可以去好好看看源码,或者去github issue列表寻找答案

上一篇 下一篇

猜你喜欢

热点阅读