vue自定義組件

前言

在項(xiàng)目開發(fā)中弧可,現(xiàn)有的一些ui框架其實(shí)是很不錯(cuò)的,但是坑也不少蒿往,加上我們的一些業(yè)務(wù)需求盛垦,其實(shí)這些框架的功能是不能去實(shí)現(xiàn)的,這時(shí)候瓤漏,我們可以結(jié)合 Vue 組件化的特性腾夯,開發(fā)可復(fù)用且適合我們業(yè)務(wù)的組件是很有必要的,以便提高開發(fā)效率和質(zhì)量蔬充。

封裝組件的步驟

  1. 思考這個(gè)組件需要實(shí)現(xiàn)什么
  2. 寫寫這個(gè)組件的基本樣式蝶俱,大致效果是怎樣的
  3. 實(shí)現(xiàn)的基本邏輯是怎樣
  4. 數(shù)據(jù)結(jié)構(gòu)、方法以及他們?nèi)绾蝹髦导⒙⒈┞?/li>
  5. 注冊(cè)榨呆、調(diào)用

實(shí)現(xiàn)什么

實(shí)現(xiàn)一個(gè)select單選的組件,通過父組件傳入待選項(xiàng)庸队,select組件進(jìn)行選擇

通過Prop向子組件傳遞數(shù)據(jù)

Vue 的組件作用域都是孤立的积蜻,不允許在子組件的模板內(nèi)直接引用父組件的數(shù)據(jù)。必須使用特定的方法才能實(shí)現(xiàn)組件之間的數(shù)據(jù)傳遞彻消。
所有的 prop 都使得其父子 prop 之間形成了一個(gè)單向下行綁定:父級(jí) prop 的更新會(huì)向下流動(dòng)到子組件中竿拆,但是反過來則不行.當(dāng)然對(duì) props 傳遞的參數(shù)應(yīng)該添加一些驗(yàn)證規(guī)則;當(dāng) prop 驗(yàn)證失敗的時(shí)候证膨,(開發(fā)環(huán)境構(gòu)建版本的) Vue 將會(huì)產(chǎn)生一個(gè)控制臺(tái)的警告如输。
Invalid prop: type check failed for prop "data". Expected Array, got String.

// 子組件
props: {
  data: Array,
  require: true
},
// 父組件
return {
  // prop指定類型后央勒,傳入的值也應(yīng)該是相對(duì)應(yīng)的類型,否則會(huì)報(bào)錯(cuò)
  data: 'sss',
  selectValue: ''
}
prop類型

String澳化、Number崔步、Boolean、Array缎谷、Object

prop類型檢測(cè)

default井濒、required、自定義驗(yàn)證

通過事件向父級(jí)組件發(fā)送消息

在組件開發(fā)中列林,要求我們與父組件進(jìn)行溝通瑞你,我們可以調(diào)用內(nèi)建的this.$emit 方法并傳入事件的名字,來向父級(jí)組件觸發(fā)一個(gè)事件;
子組件通過觸發(fā)父組件的函數(shù)希痴,我們?cè)诟附M件中監(jiān)聽這個(gè)事件者甲,就像原生DOM事件一樣
使用事件拋出一個(gè)值,用于改變父組件的選中值

// change是觸發(fā)父組件的函數(shù)
this.$emit('change', value)

組件注冊(cè)

局部注冊(cè):

  components: {
    Select
  },

代碼

父組件:

<template>
  <div id="app">
    <h2>自定義組件</h2>
    <Select @change="getSelectValue" :data="data"></Select>
    <div>這是父組件獲取到的值:{{selectValue}}</div>
  </div>
</template>

<script>
import Select from './components/Select.vue'
export default {
  name: 'app',
  components: {
    Select
  },
  data () {
    return {
      data: ['蘋果', '香蕉', '葡萄', '草莓', '西瓜'],
      selectValue: ''
    }
  },
  methods: {
    /**
     * @description 獲取select選中值
     * @param {object|array} value 當(dāng)前選中值 
     */
    getSelectValue (value) {
      this.selectValue = value
    }
  }
}
</script>

子組件:

<template>
  <div id="my-select">
    <div @click="showSelectList" class="value-box">
      <span v-if="!value" class="tip">請(qǐng)選擇</span>
      <span v-else class="value">{{value}}</span>
    </div>
    <ul v-show="selectShow">
      <li v-for="(item, index) in data" :key="index" @click="choseValue(item)">{{item}}</li>
    </ul>
  </div>
</template>
<script>
export default {
  name: 'Select',
  props: {
    data: Array
  },
  data () {
    return {
      selectShow: false,
      value: ''
    }
  },
  methods: {
    // [showSelectList 顯示選項(xiàng)]
    showSelectList () {
      this.selectShow = true
    },
    /**
     * @description 選擇當(dāng)前項(xiàng)
     * @param {string} value 當(dāng)前選中值
     */
    choseValue (value) {
      this.value = value
      this.selectShow = false
      this.$emit('change', value)
    }
  }
}
</script>

小作業(yè)

在以上select的基礎(chǔ)上砌创,增加多選操作

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末虏缸,一起剝皮案震驚了整個(gè)濱河市鲫懒,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌刽辙,老刑警劉巖窥岩,帶你破解...
    沈念sama閱讀 206,126評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異宰缤,居然都是意外死亡颂翼,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門慨灭,熙熙樓的掌柜王于貴愁眉苦臉地迎上來朦乏,“玉大人,你說我怎么就攤上這事缘挑〖” “怎么了?”我有些...
    開封第一講書人閱讀 152,445評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵语淘,是天一觀的道長(zhǎng)诲宇。 經(jīng)常有香客問我,道長(zhǎng)惶翻,這世上最難降的妖魔是什么姑蓝? 我笑而不...
    開封第一講書人閱讀 55,185評(píng)論 1 278
  • 正文 為了忘掉前任,我火速辦了婚禮吕粗,結(jié)果婚禮上纺荧,老公的妹妹穿的比我還像新娘。我一直安慰自己颅筋,他們只是感情好宙暇,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,178評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著议泵,像睡著了一般占贫。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上先口,一...
    開封第一講書人閱讀 48,970評(píng)論 1 284
  • 那天型奥,我揣著相機(jī)與錄音,去河邊找鬼碉京。 笑死厢汹,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的谐宙。 我是一名探鬼主播烫葬,決...
    沈念sama閱讀 38,276評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼卧惜!你這毒婦竟也來了厘灼?” 一聲冷哼從身側(cè)響起夹纫,我...
    開封第一講書人閱讀 36,927評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎设凹,沒想到半個(gè)月后舰讹,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡闪朱,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,883評(píng)論 2 323
  • 正文 我和宋清朗相戀三年月匣,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片奋姿。...
    茶點(diǎn)故事閱讀 37,997評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡锄开,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出称诗,到底是詐尸還是另有隱情萍悴,我是刑警寧澤,帶...
    沈念sama閱讀 33,646評(píng)論 4 322
  • 正文 年R本政府宣布寓免,位于F島的核電站癣诱,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏袜香。R本人自食惡果不足惜撕予,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,213評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望蜈首。 院中可真熱鬧实抡,春花似錦、人聲如沸欢策。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽踩寇。三九已至鸟废,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間姑荷,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評(píng)論 1 260
  • 我被黑心中介騙來泰國(guó)打工缩擂, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留鼠冕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,423評(píng)論 2 352
  • 正文 我出身青樓胯盯,卻偏偏與公主長(zhǎng)得像懈费,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子博脑,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,722評(píng)論 2 345

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