簡單的Vue小組件

前言

5月開始第二個vue項(xiàng)目炕泳,依舊是移動端昭殉,拿到效果圖后簡單的劃分了一下自己的任務(wù)模塊棵癣,計劃先封裝好公共組件和指令辕翰,然后再開始頁面編寫。

搭建項(xiàng)目

使用腳手架搭建項(xiàng)目狈谊,做完一些簡單的項(xiàng)目配置后喜命,在components里建一個public專門用來放置組件。

編寫組件

現(xiàn)在我們要寫一個小的switch開關(guān)組件:


switch.png

我們希望把它做成一個單頁面的組件的畴,因?yàn)槲覀円ゾ庉嬎臉邮皆ǔ绽覀兿刃陆ㄒ粋€vue的文件components/public/mySwitch.vue,在里面去寫他的結(jié)構(gòu)和樣式丧裁,:

<style scoped>
    .content{
        display: inline-block;
    }
    .my-switch {
        width: 52px;
        height: 31px;
        position: relative;
        border: 1px solid #dfdfdf;
        background-color: #fdfdfd;
        box-shadow: #dfdfdf 0 0 0 0 inset;
        border-radius: 20px;
        background-clip: content-box;
        display: inline-block;
        -webkit-appearance: none;
        user-select: none;
        outline: none;
    }
    .my-switch:before {
        content: '';
        width: 29px;
        height: 29px;
        position: absolute;
        top: 0;
        left: 0;
        border-radius: 20px;
        background-color: #fff;
        box-shadow: 0 1px 3px rgba(0, 0, 0, 0.4);
    }
    .my-switch:checked {
        border-color: #ff5208;
        box-shadow: #ff5208 0 0 0 16px inset;
        background-color: #ff5208;
    }
    .my-switch:checked:before {
        left: 21px;
    }
    .my-switch.my-switch-animbg {
        transition: background-color ease 0.4s;
    }
    .my-switch.my-switch-animbg:before {
        transition: left 0.3s;
    }
    .my-switch.my-switch-animbg:checked {
        box-shadow: #dfdfdf 0 0 0 0 inset;
        background-color: #ff5208;
        transition: border-color 0.4s, background-color ease 0.4s;
    }
    .my-switch.my-switch-animbg:checked:before {
        transition: left 0.3s;
    }
</style>
<template>
    <div class="content">
        <label>
            <input class="my-switch my-switch-animbg" type="checkbox" :disabled="disabled" v-model="currentValue">
        </label>
    </div>
</template>
<script>
    export default{
        props: {
            disabled: Boolean, 
            value: { // 你在外部通過v-model綁定的值在里面就寫成value
                type: Boolean,
                default: false
            }
        },
        data () {
            return {
                currentValue: this.value
            }
        },
        watch: {
            currentValue (val) {
                this.$emit('on-change', val)
            },
            value (val) {
                this.currentValue = val
            }
        }
    }
</script>
組件通信

我們知道在vue中护桦,父組件通過 props 向下傳遞數(shù)據(jù)給子組件,子組件通過 events 給父組件發(fā)送消息:

props.png

這里煎娇,我們的props里有兩個二庵,一個是在外部使用v-model綁定的value,一個是disabled,props可以設(shè)置:
type:值類型缓呛,
default:默認(rèn)值催享,
required:是否必須
現(xiàn)在,我們給組件內(nèi)部的checkbox使用v-model="currentValue"來監(jiān)聽他的值哟绊,并設(shè)置他的初始值為props傳進(jìn)來得值因妙,這樣我們的switch就能接受到外部傳進(jìn)來的值。
當(dāng)我們點(diǎn)擊時我們希望將checkbox的值傳出去票髓,這樣我們就要通過events去通信攀涵,在這里我們使用watch來監(jiān)測currentValue的值,當(dāng)他的值變化時洽沟,我們將events傳播出去并觸發(fā)以故。我們也監(jiān)測了value的值,當(dāng)value改變時將他值賦給currentValue用來顯示switch的開關(guān)狀態(tài)裆操,當(dāng)然怒详,如果在你寫的組件中需要用到點(diǎn)擊之類的,你也可以綁定click事件來觸發(fā)events踪区。

引入組件

然后我們在需要使用組件的地方將他import進(jìn)來昆烁,在components中注冊:

<div class="input-cloumn row gap">
      <span>是否設(shè)置為默認(rèn)地址</span>
      <iSwitch class="switch-default" v-model="isDefault" @on-change="setDefault"></iSwitch>
</div>
<script>
    import iSwitch from "../public/switch.vue"
    export default{
        components:{
            iSwitch
        },
        data(){
            return{
             isDefault: false
            }
        },
        methods:{
             setDefault(val){
                this.isDefault = val;
                console.log(this.isDefault)
            }
        }
    }
</script>

ok,如果我們想禁用開關(guān)朽缴,只需要在組件上加上disabled就可以了善玫,現(xiàn)在可以看看我們的組件了,工作正常。

default.png

如有錯誤茅郎,請指出蜗元,感謝!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末系冗,一起剝皮案震驚了整個濱河市奕扣,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌掌敬,老刑警劉巖惯豆,帶你破解...
    沈念sama閱讀 216,843評論 6 502
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異奔害,居然都是意外死亡楷兽,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,538評論 3 392
  • 文/潘曉璐 我一進(jìn)店門华临,熙熙樓的掌柜王于貴愁眉苦臉地迎上來芯杀,“玉大人,你說我怎么就攤上這事雅潭〗液瘢” “怎么了?”我有些...
    開封第一講書人閱讀 163,187評論 0 353
  • 文/不壞的土叔 我叫張陵扶供,是天一觀的道長筛圆。 經(jīng)常有香客問我,道長椿浓,這世上最難降的妖魔是什么太援? 我笑而不...
    開封第一講書人閱讀 58,264評論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮扳碍,結(jié)果婚禮上粉寞,老公的妹妹穿的比我還像新娘。我一直安慰自己左腔,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,289評論 6 390
  • 文/花漫 我一把揭開白布捅儒。 她就那樣靜靜地躺著液样,像睡著了一般。 火紅的嫁衣襯著肌膚如雪巧还。 梳的紋絲不亂的頭發(fā)上鞭莽,一...
    開封第一講書人閱讀 51,231評論 1 299
  • 那天,我揣著相機(jī)與錄音麸祷,去河邊找鬼澎怒。 笑死,一個胖子當(dāng)著我的面吹牛阶牍,可吹牛的內(nèi)容都是我干的喷面。 我是一名探鬼主播星瘾,決...
    沈念sama閱讀 40,116評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼惧辈!你這毒婦竟也來了琳状?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 38,945評論 0 275
  • 序言:老撾萬榮一對情侶失蹤盒齿,失蹤者是張志新(化名)和其女友劉穎念逞,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體边翁,經(jīng)...
    沈念sama閱讀 45,367評論 1 313
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡翎承,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,581評論 2 333
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了符匾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片叨咖。...
    茶點(diǎn)故事閱讀 39,754評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖待讳,靈堂內(nèi)的尸體忽然破棺而出芒澜,到底是詐尸還是另有隱情,我是刑警寧澤创淡,帶...
    沈念sama閱讀 35,458評論 5 344
  • 正文 年R本政府宣布痴晦,位于F島的核電站,受9級特大地震影響琳彩,放射性物質(zhì)發(fā)生泄漏誊酌。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,068評論 3 327
  • 文/蒙蒙 一露乏、第九天 我趴在偏房一處隱蔽的房頂上張望碧浊。 院中可真熱鬧,春花似錦瘟仿、人聲如沸箱锐。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,692評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽驹止。三九已至,卻和暖如春观蜗,著一層夾襖步出監(jiān)牢的瞬間投慈,已是汗流浹背圆丹。 一陣腳步聲響...
    開封第一講書人閱讀 32,842評論 1 269
  • 我被黑心中介騙來泰國打工距帅, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留交煞,地道東北人。 一個月前我還...
    沈念sama閱讀 47,797評論 2 369
  • 正文 我出身青樓,卻偏偏與公主長得像撤卢,于是被迫代替她去往敵國和親环凿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,654評論 2 354

推薦閱讀更多精彩內(nèi)容

  • 這篇筆記主要包含 Vue 2 不同于 Vue 1 或者特有的內(nèi)容凸丸,還有我對于 Vue 1.0 印象不深的內(nèi)容拷邢。關(guān)于...
    云之外閱讀 5,050評論 0 29
  • 序 今年大前端的概念一而再再而三的被提及,那么大前端時代究竟是什么呢屎慢?大前端這個詞最早是因?yàn)樵诎⒗飪?nèi)部有很多前端開...
    一縷殤流化隱半邊冰霜閱讀 11,233評論 19 92
  • 此文基于官方文檔瞭稼,里面部分例子有改動,加上了一些自己的理解 什么是組件腻惠? 組件(Component)是 Vue.j...
    陸志均閱讀 3,825評論 5 14
  • Vue 實(shí)例 屬性和方法 每個 Vue 實(shí)例都會代理其 data 對象里所有的屬性:var data = { a:...
    云之外閱讀 2,207評論 0 6
  • 你知道別人明明吵了架 一直挺尷尬沒有人主動講和 結(jié)果你今天晚上又看到了她倆一起去上晚自習(xí) 這種事挺多的 尤其是女生...
    林深時見鹿有閱讀 222評論 0 0