Vue——自定義組件

new Vue({

el:'#app',

data:{

cars:[

{

title:'保時捷',

content:'德國豪華品牌德國豪華品牌德國豪華品牌德國豪華品牌德國豪華品牌德國豪華品牌德國豪華品牌'

},

{

title:'雷克薩斯',

content:'日本豪華品牌日本豪華品牌日本豪華品牌日本豪華品牌日本豪華品牌日本豪華品牌日本豪華品牌'

},

{

title:'紅旗',

content:'中國豪華品牌中國豪華品牌中國豪華品牌中國豪華品牌中國豪華品牌中國豪華品牌中國豪華品牌'

}

]

},

// 定義組件

components:{

// 每個組件就是一個小型的Vue實例,它里面除了不能設(shè)置el選項句喜,其他選項它都有预愤。

'b-box':{

// 組件的模板

template:`

<div class="box">

? ? <div class="title">{{title}}</div>

? ? <div class="content">

? ? ? ? {{content}}

? ? </div>

</div>

`,

// 定義組件標(biāo)簽上的屬性

props:["title","content"],

// 注意:Vue實例的data選項可以是一個對象,也可以是一個方法藤滥,由該方法返回一個對象

// 但是在組件中鳖粟,data選項必須是一個方法,由該方法返回一個對象

// 因為組件可能會使用很多次拙绊,如果data選項是對象的話向图,會導(dǎo)致多個組件使用了同一份數(shù)據(jù)。

data() {

return {

name:'我是組件'

}

},

}

}

})


<div id="app">

? ? <b-box v-for="(item,index) in cars" :key="index" :title="item.title" :content="item.content"></b-box>

</div>



2. counter組件

<div id="app">

? ? <div>衣服:<b-counter :count="yfCount" @synccount="syncYfCount">

? ? ? ? </b-counter>--{{yfCount}}</div>

? ? <div>褲子:<b-counter :count="kzCount" :min-count="2" :max-count="8" @synccount="syncKzCount">

? ? ? ? </b-counter>--{{kzCount}}</div>

? ? <div>鞋子:<b-counter :count="xzCount" :max-count="20" @synccount="syncXzCount">

? ? ? ? </b-counter>--{{xzCount}}</div>

</div>


new Vue({

? ? el:'#app',

? ? // 定義數(shù)據(jù)

? ? data() {

? ? ? ? return {

? ? ? ? ? ? // 衣服的數(shù)量

? ? ? ? ? ? yfCount:3,

? ? ? ? ? ? // 褲子的數(shù)量

? ? ? ? ? ? kzCount:5,

? ? ? ? ? ? // 鞋子的數(shù)量

? ? ? ? ? ? xzCount:7

? ? ? ? }

? ? },

? ? // 定義方法

? ? methods: {

? ? ? ? // 同步衣服的數(shù)量

? ? ? ? syncYfCount(e){

? ? ? ? ? ? this.yfCount = e

? ? ? ? },

? ? ? ? // 同步褲子的數(shù)量

? ? ? ? syncKzCount(e){

? ? ? ? ? ? this.kzCount = e

? ? ? ? },

? ? ? ? // 同步鞋子的數(shù)量

? ? ? ? syncXzCount(e){

? ? ? ? ? ? this.xzCount = e

? ? ? ? }

? ? },

? ? // 注冊組件

? ? components:{

? ? ? ? // 注意:組件的名稱不要跟原生html元素重名

? ? ? ? 'b-counter':{

? ? ? ? ? ? // template選項标沪,用于定義組件的模板

? ? ? ? ? ? template:`

? ? ? ? ? ? <div class="counter">

? ? ? ? ? ? <button @click="jian" :disabled="myCount===minCount">-</button>

? ? ? ? ? ? <input type="text" :value="myCount" readonly>

? ? ? ? ? ? <button @click="jia" :disabled="myCount===maxCount">+</button>

? ? ? ? ? ? </div>

? ? ? ? ? ? `,

? ? ? ? ? ? // 組件的props選項榄攀,用于定義組件標(biāo)簽上的屬性

? ? ? ? ? ? // props的值可以是一個字符串?dāng)?shù)組,里面定義每一個標(biāo)簽屬性名稱金句,這是簡單用法檩赢,不能對屬性做嚴(yán)格的驗證。

? ? ? ? ? ? // props:["count"]

? ? ? ? ? ? // props的值可以是一個對象违寞,里面定義每個標(biāo)簽屬性名稱贞瞒,以及對應(yīng)的類型

? ? ? ? ? ? // props:{

? ? ? ? ? ? // ? ? count:Number

? ? ? ? ? ? // }

? ? ? ? ? ? // props的值可以是一個對象,里面定義的每個標(biāo)簽屬性名稱也可以是一個對象趁曼,在這個對象里面定義該屬性的完整信息

? ? ? ? ? ? props:{

? ? ? ? ? ? ? ? // 數(shù)量

? ? ? ? ? ? ? ? count:{

? ? ? ? ? ? ? ? ? ? // 類型

? ? ? ? ? ? ? ? ? ? type:Number,

? ? ? ? ? ? ? ? ? ? // 非空

? ? ? ? ? ? ? ? ? ? required:true,

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? // 最小值

? ? ? ? ? ? ? ? minCount:{

? ? ? ? ? ? ? ? ? ? type:Number,

? ? ? ? ? ? ? ? ? ? // 默認(rèn)值

? ? ? ? ? ? ? ? ? ? default:1

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? // 最大值

? ? ? ? ? ? ? ? maxCount:{

? ? ? ? ? ? ? ? ? ? type:Number,

? ? ? ? ? ? ? ? ? ? default:10

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? // 定義組件的數(shù)據(jù)

? ? ? ? ? ? data() {

? ? ? ? ? ? ? ? return {

? ? ? ? ? ? ? ? ? ? // 從props里面將count的值給myCount復(fù)制一份

? ? ? ? ? ? ? ? ? ? myCount:this.count

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? // 定義組件的方法

? ? ? ? ? ? methods: {

? ? ? ? ? ? ? ? //數(shù)量減方法

? ? ? ? ? ? ? ? jian(){

? ? ? ? ? ? ? ? ? ? this.myCount--

? ? ? ? ? ? ? ? },

? ? ? ? ? ? ? ? // 數(shù)量加方法

? ? ? ? ? ? ? ? jia(){

? ? ? ? ? ? ? ? ? ? this.myCount++

? ? ? ? ? ? ? ? }

? ? ? ? ? ? },

? ? ? ? ? ? // 偵聽器

? ? ? ? ? ? watch:{

? ? ? ? ? ? ? ? // 偵聽myCount是否發(fā)生變化

? ? ? ? ? ? ? ? myCount(){

? ? ? ? ? ? ? ? ? ? // 觸發(fā)自定義事件军浆,注意:事件名稱中不能采用大寫字母

? ? ? ? ? ? ? ? ? ? this.$emit('synccount',this.myCount)

? ? ? ? ? ? ? ? }

? ? ? ? ? ? }

? ? ? ? }

? ? }

})


3. 評分組件


<div id="app">

? ? <div>

? ? ? ? 質(zhì)量:<b-star :score="zl" @syncscore="synczl"></b-star>--{{zl}}

? ? </div>

? ? <div>

? ? ? ? 物流:<b-star :score="wl" @syncscore="syncwl"></b-star>--{{wl}}

? ? </div>

</div>

<hr>

<div id="app2">

? ? <div>

? ? ? ? 外觀:<b-star :score="wg" @syncscore="syncwg"></b-star>--{{wg}}

? ? </div>

? ? <div>

? ? ? ? 客服:<b-star :score="kf" @syncscore="synckf"></b-star>--{{kf}}

? ? </div>

</div>

// 定義全局組件,讓每一個Vue實例都可以使用

Vue.component('b-star', {

template: `

<div class="star">

? ? <i v-for="(item,index) in 10" :key="index" class="iconfont" :class="index<myScore ? 'icon-xingxing' : 'icon-star'"

? ? ? ? @mouseenter="mouseenter(index)" @mouseleave="mouseleave" @click="click(index)"></i>

</div>

`,

// 定義組件的標(biāo)簽屬性

props: ['score'],

data() {

return {

// 將組件接收到的值挡闰,在組件內(nèi)部中轉(zhuǎn)一下

myScore: this.score,

// 備份一下score值

backMyScore: this.score

}

},

methods: {

// 鼠標(biāo)進(jìn)入時乒融,調(diào)用的方法

mouseenter(index) {

this.myScore = index + 1

},

// 鼠標(biāo)離開時,調(diào)用的方法

mouseleave() {

this.myScore = this.backMyScore

},

// 鼠標(biāo)點擊時摄悯,調(diào)用的方法

click(index) {

this.backMyScore = index + 1

}

},

// 偵聽器

watch: {

// 偵聽myScore的變化

myScore() {

// 觸發(fā)自定義事件

this.$emit('syncscore', this.myScore)

}

}

})

new Vue({

el: '#app',

// 數(shù)據(jù)

data() {

return {

// 質(zhì)量

zl: 0,

// 物流

wl: 0,

}

},

// 方法

methods: {

// 同步質(zhì)量評分

synczl(e) {

this.zl = e

},

// 同步物流評分

syncwl(e) {

this.wl = e

}

},

// 注意:這里注冊的局部組件赞季,方式是:直接在Vue實例內(nèi)部的components選項中定義組件。

components: {

}

})

// 這里創(chuàng)建的Vue實例奢驯,跟上面的Vue實例申钩,不是同一個對象

new Vue({

el: '#app2',

data() {

return {

// 外觀

wg: 0,

// 客服

kf: 0

}

},

methods: {

// 同步外觀評分

syncwg(e){

this.wg = e

},

// 同步客房評分

synckf(e){

this.kf = e

}

},

})

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市瘪阁,隨后出現(xiàn)的幾起案子撒遣,更是在濱河造成了極大的恐慌断盛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,386評論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件愉舔,死亡現(xiàn)場離奇詭異钢猛,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)轩缤,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,142評論 3 394
  • 文/潘曉璐 我一進(jìn)店門命迈,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人火的,你說我怎么就攤上這事壶愤。” “怎么了馏鹤?”我有些...
    開封第一講書人閱讀 164,704評論 0 353
  • 文/不壞的土叔 我叫張陵征椒,是天一觀的道長。 經(jīng)常有香客問我湃累,道長勃救,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,702評論 1 294
  • 正文 為了忘掉前任治力,我火速辦了婚禮蒙秒,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘宵统。我一直安慰自己晕讲,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,716評論 6 392
  • 文/花漫 我一把揭開白布马澈。 她就那樣靜靜地躺著瓢省,像睡著了一般。 火紅的嫁衣襯著肌膚如雪痊班。 梳的紋絲不亂的頭發(fā)上勤婚,一...
    開封第一講書人閱讀 51,573評論 1 305
  • 那天,我揣著相機(jī)與錄音辩块,去河邊找鬼蛔六。 笑死荆永,一個胖子當(dāng)著我的面吹牛废亭,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播具钥,決...
    沈念sama閱讀 40,314評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼豆村,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了骂删?” 一聲冷哼從身側(cè)響起掌动,我...
    開封第一講書人閱讀 39,230評論 0 276
  • 序言:老撾萬榮一對情侶失蹤四啰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后粗恢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體柑晒,經(jīng)...
    沈念sama閱讀 45,680評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,873評論 3 336
  • 正文 我和宋清朗相戀三年眷射,在試婚紗的時候發(fā)現(xiàn)自己被綠了匙赞。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,991評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡妖碉,死狀恐怖涌庭,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欧宜,我是刑警寧澤坐榆,帶...
    沈念sama閱讀 35,706評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站冗茸,受9級特大地震影響席镀,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜夏漱,卻給世界環(huán)境...
    茶點故事閱讀 41,329評論 3 330
  • 文/蒙蒙 一愉昆、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧麻蹋,春花似錦跛溉、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,910評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至刹勃,卻和暖如春堪侯,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背荔仁。 一陣腳步聲響...
    開封第一講書人閱讀 33,038評論 1 270
  • 我被黑心中介騙來泰國打工伍宦, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人乏梁。 一個月前我還...
    沈念sama閱讀 48,158評論 3 370
  • 正文 我出身青樓次洼,卻偏偏與公主長得像,于是被迫代替她去往敵國和親遇骑。 傳聞我的和親對象是個殘疾皇子卖毁,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 44,941評論 2 355

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

  • 組件系統(tǒng)是Vue.js其中一個重要的概念,它提供了一種抽象落萎,讓我們可以使用獨立可復(fù)用的小組件來構(gòu)建大型應(yīng)用亥啦,任意類...
    一代碼農(nóng)1970閱讀 1,223評論 0 1
  • 準(zhǔn)備: 使用vue-cli新建一個webpack項目 注冊組件: 打開創(chuàng)建的項目炭剪,在component文件夾中新建...
    緣意天閱讀 1,654評論 1 1
  • 'vue的雙向綁定是針對表單元素,當(dāng)然可以自定義組件實現(xiàn)雙向綁定翔脱。(外部data的字段值賦值給自定義組件的屬性奴拦,自...
    說好的幸福2020閱讀 2,857評論 0 0
  • 子組件向父組件傳值的時候他必須要我在組件標(biāo)簽上定義事件來接收,這樣做不是不可行届吁,但是如果是我們自定義的組件只是要做...
    回憶不死我們不散閱讀 2,416評論 0 0
  • 官方文檔地址v-model大多用于input組件粱坤,默認(rèn)會利用名為 value 的 prop 和名為 input 的...
    GX_路閱讀 320評論 0 0