Vue组件开辟

在进修vue的时刻,发现有许多运用vue开辟的ui组件。本着进修的目标,本身也模仿Element写一些组件。

运用VuePress编写组件文档。

单元测试:karma+mocha+chai+sinon

文档预览地点:预览链接

运用VuePress编辑文档的代码接见:组件文档
关于VuePress运用方法:博客园掘金

完全代码:组件代码

接下来就是编写组件,首先以经常使用的组件Button为例。

经由过程props属性吸收父组件通报过来的值,并对通报过来的值举行范例考证。

props:{
    type:{
        type: String,
        validator (value) {
            return [
                'primary',
                'success',
                'info',
                'warning',
                'danger'
            ].indexOf(value)>-1;
        }
    },
    iconName:{
        type:String
    },
    iconSize:{
        type:String,
        default:'small'
    },
    iconPosition:{
        type: String,
        default: 'left',
        validator(value){
            return[
                'left',
                'right'
            ].indexOf(value)>-1
        }
    },
    circle:{
        type: Boolean
    },
    disabled:{
        type: Boolean
    }
}

经由过程 props吸收父组件通报的值,能够完成种种功用不一样的button组件。

<template>
    <button @click="handleClick" class="vi-button" :disabled="disabled" :class=buttonClass>
        <span class="vi-button-wrapper" :class=wrapperClass>
            <span v-if="iconName" class="vi-button-icon">
                <vi-icon :viIconName="iconName" :viIconSize="iconSize"></vi-icon>
            </span>
            <span class="vi-button-content">
                <slot></slot>
            </span>
        </span>
    </button>
</template>
 
<script>
export default {
    name: 'ViButton',
    props:{
        type:{
            type: String,
            validator (value) {
                return [
                    'primary',
                    'success',
                    'info',
                    'warning',
                    'danger'
                ].indexOf(value)>-1;
            }
        },
        iconName:{
            type:String
        },
        iconSize:{
            type:String,
            default:'small'
        },
        iconPosition:{
            type: String,
            default: 'left',
            validator(value){
                return[
                    'left',
                    'right'
                ].indexOf(value)>-1
            }
        },
        circle:{
            type: Boolean
        },
        disabled:{
            type: Boolean
        }
    },
    methods: {
        handleClick(event) {
            this.$emit('click', event);
        }
    },
    computed:{
        buttonClass(){
            return {
                [`vi-button-${this.type}`]:this.type,
                [`vi-button-disabled`]:this.disabled,
                [`vi-button-circle`]:this.circle
            }
        },
        wrapperClass(){
            return {
                [`vi-button-${this.iconPosition}`]:this.iconName&&this.iconPosition
            }
        }
    }
}
</script>

完全代码请接见:组件代码

    原文作者:qfstudy
    原文地址: https://segmentfault.com/a/1190000018448582
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞