vue封裝組件的正確方式-封裝類似elementui的組件

第一種:通過組件來調用顯示的

<template>
<!--src/component/custom/main.vue-->
    <div class = "contine">
        <p class = "title">
            {{title}}
        </p>
        <slot class = "contine" name = "contine">

        </slot>
    </div>
</template>

<script>
export default {
    name:"test-component",
    props:{
        title:{
            type : String,
            default:"組件標題"
        }
    }
}
</script>

<style lang="scss" scoped>
    $black : #333;
    $mainSize : 16px;
    $mainLineHeight:30px;
    $lineCenter:center;
    .extendStyle {
        border-radius:$mainSize;
        box-shadow: 3px 3px 3px 3px #333;
    }
    .contine{
        width:50%;
        height:130px;
        color:$black;
        font-size:$mainSize;
        @extend .extendStyle;
        .title,.contine{
            color:$black;
            font-size:$mainSize;
            text-align:$lineCenter;
            line-height:$mainLineHeight;

        }
    }
</style>

組件說明:只是一個簡單的組件 顯示一個標題和一段自定義slot內容(僅用作展示)篷朵;我想通過以下方式引入

import TestModel from "./testComponent/index";
Vue.use(TestModel);

并且調用方法為:

<test-conponent title = "123">
      <div slot = "contine">
          2222
        </div>
</test-conponent>

這么做虽风,像不像element魂角?是有點這個意思對吧溢十,但是怎么實現(xiàn)呢诉植,在這先說明下use的作用届腐,其實就是相當于執(zhí)行他的install方法适篙,明白這個 之后 開始動工往核,思路:執(zhí)行他的install方法,聲明一個vue組件嚷节,組件內容就是上面寫的铆铆,從而達到全局組件的目的,來看看我的js怎么寫的:

import main from "./main";
main.install = (Vue) => {
    Vue.component("test-conponent",main);
}
export default main;

沒錯就是這么一句丹喻,第一種的簡單組件就寫完了薄货,一次引入 全局通用。

第二種碍论、通過指令調用谅猾,比如element的loading組件等

<template>
    <div class = "loading-container" v-show = "show">
        <div class = "loading-mask"></div>
        <div class="loading-content">
            <div class="loading-animate"></div>
            <div class="loading-text">
                {{text}}
            </div>
        </div>
    </div>
</template>

<script>
export default {
    props:{
        show:{
            type:Boolean,
        },
        text:{
            type:String,
            default:"加載中...",
        }
    }
}
</script>

<style>
    .loading-container {
        position: relative;
        text-align: center;
    }
    .loading-mask {
        position:fixed;
        top:0;
        bottom:0;
        left: 0;
        right: 0;
        background-color: rgba(0,0,0,.7);
    }
    .loading-content{
        position:fixed;
        left:50%;
        top:45%;
        z-index:999;
        transform: translate(-50%,-45%);
        text-align:center;
        color:#fff;

    }
    .loading-content .loading-animate{
        display:inline-block;
        width:40px;
        height:40px;
        vertical-align: baseline;
        margin:25px 0 10px;
        vertical-align: middle;
        animation:cricleLoading 1s steps(12,end) infinite;
        background: transparent url("data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIxMjAiIGhlaWdodD0iMTIwIiB2aWV3Qm94PSIwIDAgMTAwIDEwMCI+PHBhdGggZmlsbD0ibm9uZSIgZD0iTTAgMGgxMDB2MTAwSDB6Ii8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTlFOUU5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0idHJhbnNsYXRlKDAgLTMwKSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iIzk4OTY5NyIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgzMCAxMDUuOTggNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjOUI5OTlBIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDYwIDc1Ljk4IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0EzQTFBMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSg5MCA2NSA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNBQkE5QUEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoMTIwIDU4LjY2IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0IyQjJCMiIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgxNTAgNTQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjQkFCOEI5IiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKDE4MCA1MCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDMkMwQzEiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTE1MCA0NS45OCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNDQkNCQ0IiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTEyMCA0MS4zNCA2NSkiLz48cmVjdCB3aWR0aD0iNyIgaGVpZ2h0PSIyMCIgeD0iNDYuNSIgeT0iNDAiIGZpbGw9IiNEMkQyRDIiIHJ4PSI1IiByeT0iNSIgdHJhbnNmb3JtPSJyb3RhdGUoLTkwIDM1IDY1KSIvPjxyZWN0IHdpZHRoPSI3IiBoZWlnaHQ9IjIwIiB4PSI0Ni41IiB5PSI0MCIgZmlsbD0iI0RBREFEQSIgcng9IjUiIHJ5PSI1IiB0cmFuc2Zvcm09InJvdGF0ZSgtNjAgMjQuMDIgNjUpIi8+PHJlY3Qgd2lkdGg9IjciIGhlaWdodD0iMjAiIHg9IjQ2LjUiIHk9IjQwIiBmaWxsPSIjRTJFMkUyIiByeD0iNSIgcnk9IjUiIHRyYW5zZm9ybT0icm90YXRlKC0zMCAtNS45OCA2NSkiLz48L3N2Zz4=") no-repeat;
        background-size: 100%;

    }
    .loading-content .loading-text{
        font-size: 16px;
    }
    @-webkit-keyframes cricleLoading{
        0%{
            transform: rotate3d(0,0,1,0deg);
        }
        100%{
            transform: rotate3d(0,0,1,360deg);
        }
    }
     @keyframes cricleLoading{
        0%{
            transform: rotate3d(0,0,1,0deg);
        }
        100%{
            transform: rotate3d(0,0,1,360deg);
        }
    }
</style>

以上是loading組件的內容,要通過這種方式引入:

import loading from "./toolTip";
Vue.use(loading);

并且通過指令方式調用:

this.$loading.show({
        text:"拼命加載中"
      });

有的朋友可能會說了,這怎么可能啊税娜,沒有節(jié)點怎么放進去坐搔?對 沒錯 確實,沒有節(jié)點是沒辦法進去的敬矩,但是沒有節(jié)點就聲明節(jié)點 對么概行?

import LoadingComponent from "./loading";
import Vue from "vue";
let instance;
const loadingConstructor = Vue.extend(LoadingComponent); 
instance = new loadingConstructor({
    el:document.createElement("div")
});
instance.show = false;
const loading = {
    show(options = {}){
        instance.show = true;
        document.body.appendChild(instance.$el);
        instance.text = options.text;
        setTimeout(()=>{
            loading.hide();
        },5000)
    },
    hide() {
        instance.show = false;
    }
}
export default {
    install(){
        if(!Vue.loading){
            Vue.$loading = loading;
        }
        Vue.mixin({
            created(){
                this.$loading = Vue.$loading;
            }
        })
    }
}

實際上就是變相的利用install方法 吧loading指令掛到頁面中,這樣不管在哪里都可以直接用this.$loading調用弧岳。
get到了么凳忙?get到了就點個關注吧

?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市禽炬,隨后出現(xiàn)的幾起案子涧卵,更是在濱河造成了極大的恐慌,老刑警劉巖腹尖,帶你破解...
    沈念sama閱讀 221,888評論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件柳恐,死亡現(xiàn)場離奇詭異,居然都是意外死亡热幔,警方通過查閱死者的電腦和手機乐设,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評論 3 399
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來绎巨,“玉大人近尚,你說我怎么就攤上這事∪纤福” “怎么了?”我有些...
    開封第一講書人閱讀 168,386評論 0 360
  • 文/不壞的土叔 我叫張陵介汹,是天一觀的道長却嗡。 經(jīng)常有香客問我,道長嘹承,這世上最難降的妖魔是什么窗价? 我笑而不...
    開封第一講書人閱讀 59,726評論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮叹卷,結果婚禮上撼港,老公的妹妹穿的比我還像新娘。我一直安慰自己骤竹,他們只是感情好帝牡,可當我...
    茶點故事閱讀 68,729評論 6 397
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著蒙揣,像睡著了一般靶溜。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,337評論 1 310
  • 那天罩息,我揣著相機與錄音嗤详,去河邊找鬼。 笑死瓷炮,一個胖子當著我的面吹牛葱色,可吹牛的內容都是我干的。 我是一名探鬼主播娘香,決...
    沈念sama閱讀 40,902評論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼苍狰,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了茅主?” 一聲冷哼從身側響起舞痰,我...
    開封第一講書人閱讀 39,807評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎诀姚,沒想到半個月后响牛,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評論 1 318
  • 正文 獨居荒郊野嶺守林人離奇死亡赫段,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 38,439評論 3 340
  • 正文 我和宋清朗相戀三年呀打,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片糯笙。...
    茶點故事閱讀 40,567評論 1 352
  • 序言:一個原本活蹦亂跳的男人離奇死亡贬丛,死狀恐怖,靈堂內的尸體忽然破棺而出给涕,到底是詐尸還是另有隱情豺憔,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評論 5 350
  • 正文 年R本政府宣布够庙,位于F島的核電站恭应,受9級特大地震影響,放射性物質發(fā)生泄漏耘眨。R本人自食惡果不足惜昼榛,卻給世界環(huán)境...
    茶點故事閱讀 41,933評論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望剔难。 院中可真熱鬧胆屿,春花似錦、人聲如沸偶宫。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,420評論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纯趋。三九已至彻秆,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背唇兑。 一陣腳步聲響...
    開封第一講書人閱讀 33,531評論 1 272
  • 我被黑心中介騙來泰國打工酒朵, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人扎附。 一個月前我還...
    沈念sama閱讀 48,995評論 3 377
  • 正文 我出身青樓蔫耽,卻偏偏與公主長得像,于是被迫代替她去往敵國和親留夜。 傳聞我的和親對象是個殘疾皇子匙铡,可洞房花燭夜當晚...
    茶點故事閱讀 45,585評論 2 359

推薦閱讀更多精彩內容

  • 一個正常人鳖眼,只要活著,有五感嚼摩,與外界有著聯(lián)系或互動钦讳,便會產(chǎn)生一些想法和感觸。這樣的感觸可以說每天都有枕面,并且很多愿卒。而...
    自由心空閱讀 3,072評論 5 11
  • P1 目標導向設計 數(shù)字產(chǎn)品的設計過程 “為賦予有意義的秩序,做出有意識或直覺的努力” 理解用戶的期望潮秘、需求琼开、動機...
    碎越閱讀 422評論 0 0