Vue2.0 組件傳值通訊的示例代碼
在Vue項(xiàng)目中,我們經(jīng)常把某個(gè)功能模塊封裝起來,形成組件,下次調(diào)用時(shí)非常方便,同時(shí)也是在一些循環(huán)中進(jìn)行dom操作的一種較好方式。
本次我想以一個(gè)評(píng)價(jià)組件來說一下組件的事件和參數(shù)是怎樣傳遞的,如何完成的組件通訊。
示例如下:
這里先說一下組件設(shè)計(jì)思路:
明確整個(gè)功能場(chǎng)景,找出存在的事件操作,此例是一個(gè)簡(jiǎn)單的評(píng)價(jià)功能,即點(diǎn)擊某一個(gè)星星時(shí)左邊以及當(dāng)前為選中的黃色星,右邊為未選中的白色星。
確定可復(fù)用的組件,即具有重復(fù)操作的模塊,這里明顯的每一個(gè)星星為一個(gè)可復(fù)用組件, 其實(shí)還有個(gè)星星變成白色和黃色也是一個(gè)小組件,這種在具體寫的時(shí)候覺得可以再分即可。
至此一個(gè)劃分了三個(gè)組件:JudgeOf、JudgeStar、StarImg
這里需要明確的是,在大多數(shù)的組件通訊中,父組件往子組件傳遞的都是數(shù)據(jù),子組件往父組件傳遞的才是事件,
我們姑且稱父到子走的是一個(gè)數(shù)據(jù)流,子到父走的是一個(gè)事件流,了解這一點(diǎn)基本可以很好的了解組件通訊的情況。
JudgeOf組件:
基本的外框,循環(huán)starList構(gòu)成三個(gè)評(píng)分選項(xiàng)。向子組件傳遞選項(xiàng)名字,和當(dāng)前選項(xiàng)的索引
<template> <div> <div class="judge-modal" @click="cancel"></div> <div class="judge"> <br> <div class="text-center font16">評(píng)價(jià)</div> <judge-star v-for="item,index in starList" :key="index" @judge="judge" :name="item.name" :index="index" ></judge-star> <br> <div class="box container text-left"> <span class="icon-i"></span> 評(píng)價(jià)內(nèi)容 </div> <div class="bgfff container font14"> <textarea placeholder="請(qǐng)輸入您的評(píng)價(jià),方便我們改進(jìn),謝謝!" type="textarea" class="textarea" rows="6" v-model="judgeTxt"></textarea> </div> <div class="container"> <br> <div class="btn btn_block text-center" @click="submit">提交</div> </div> </div> </div> </template> <script> import JudgeStar from './judgeStar.vue' export default{ data(){ return{ starList:[ {name:'服務(wù)態(tài)度',key:'evaluate.serviceStarLevel'}, {name:'責(zé)任感',key:'evaluate.dutyStarLevel'}, {name:'準(zhǔn)時(shí)度',key:'evaluate.onTimeStarLevel'}, ], evaluate:[], judgeTxt:'' } }, components:{ JudgeStar }, computed:{ }, methods:{ cancel(){ this.$emit('cancel') }, submit(){ let data = ''; this.starList.forEach((val,index)=>{ data =`${val.key}:${this.evaluate[index]}` console.log(data) }); }, judge(data){ this.evaluate[data[0]]=data[1]; } } } </script>
JudgeStar組件:
在這里注冊(cè)一個(gè)chooseIndex,當(dāng)點(diǎn)擊某一個(gè)星星時(shí),StarImg組件emit當(dāng)前星星的index,JudgeStar組件中接收此參數(shù)并賦值給chooseIndex,同時(shí)StarImg里面watch這個(gè)參數(shù),大于index表明沒有被選中,反之則為選中,
<template> <div class="flex_cont container"> <div class="flex_item name">{{name}}</div> <div class="flex_item"> <star-img @choose="choose" v-for="item,index in starArr" :key="index" :chooseIndex="chooseIndex" :index="index"></star-img> </div> </div> </template> <script> import StarImg from './starImg.vue' export default{ props:{ name:String, index:'' }, data(){ return{ chooseIndex:4, starArr:Array.from({ length: 5 }) } }, components:{ StarImg }, mounted(){ this.$emit('judge',[this.index,this.chooseIndex+1]); }, methods:{ choose(data){ this.chooseIndex = data; this.$emit('judge',[this.index,this.chooseIndex+1]); } } } </script>
StarImg組件:
觀察chooseIndex值的變化
<template> <i style="margin: 0 3px;" :class="icon" @click="choose"></i> </template> <script> export default{ props:{ index:Number, //當(dāng)前星星的索引 chooseIndex:Number //選中星星的索引 }, data(){ return{ icon:'icon-star' } }, watch:{ //大于index表明沒有被選中,反之則為選中, chooseIndex:function () { if(this.chooseIndex>=this.index){ this.icon = 'icon-star' } else { this.icon = 'icon-star2' } }, }, methods:{ choose(){ /*所選星星最大索引*/ this.$emit('choose',this.index) } }, created(){ } } </script>
總結(jié)一下:
- 父組件通過v-bind:綁定參數(shù)傳給子組件,子組件通過props接受這個(gè)參數(shù)。
- 在組件的最底層開始寫事件,由最底層組件逐步向上$emit事件流,并攜帶相應(yīng)參數(shù),最后在父組件內(nèi)完成總的數(shù)據(jù)處理。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
- vue2.0 子組件改變props值,并向父組件傳值的方法
- vue 子組件向父組件傳值方法
- Vue2.0中三種常用傳值方式(父?jìng)髯?、子傳父、非父子組件傳值)
- 圖文介紹Vue父組件向子組件傳值
- Vue 組件傳值幾種常用方法【總結(jié)】
- Vue父子模版?zhèn)髦导敖M件傳值的三種方法
- vue單頁(yè)開發(fā)父子組件傳值思路詳解
- Vue實(shí)現(xiàn)的父組件向子組件傳值功能示例
- 詳解Vue中組件傳值的多重實(shí)現(xiàn)方式
- Vue組件通信中非父子組件傳值知識(shí)點(diǎn)總結(jié)
- vue組件傳值的實(shí)現(xiàn)方式小結(jié)【三種方式】
相關(guān)文章
Element-ui?Layout布局(Row和Col組件)的實(shí)現(xiàn)
我們?cè)趯?shí)際開發(fā)中遇到一些布局的時(shí)候會(huì)用到Layout布局,本文就詳細(xì)的介紹了Element-ui?Layout布局(Row和Col組件)的實(shí)現(xiàn),具有一定的參考價(jià)值,感興趣的可以了解一下2021-12-12Vue實(shí)現(xiàn)簡(jiǎn)單基礎(chǔ)的圖片裁剪功能
這篇文章主要為大家詳細(xì)介紹了如何利用Vue2實(shí)現(xiàn)簡(jiǎn)單基礎(chǔ)的圖片裁剪功能,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起了解一下2022-09-09vue使用sass根據(jù)環(huán)境進(jìn)行樣式判斷區(qū)分方式
這篇文章主要介紹了vue使用sass根據(jù)環(huán)境進(jìn)行樣式判斷區(qū)分方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-03-03elementUI Tree 樹形控件單選實(shí)現(xiàn)示例
在ElementUI中樹形控件本身不支持單選功能,本文就來介紹一下如何實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-06-06vue2.x數(shù)組劫持原理的實(shí)現(xiàn)
這篇文章主要介紹了vue2.x數(shù)組劫持原理的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-04-04vue+echarts實(shí)現(xiàn)可拖動(dòng)節(jié)點(diǎn)的折線圖(支持拖動(dòng)方向和上下限的設(shè)置)
制作一個(gè)折線圖用于顯示當(dāng)前24小時(shí)的數(shù)據(jù),并且可以通過拖動(dòng)折現(xiàn)圖設(shè)置數(shù)據(jù),接下來通過本文給大家分享vue+echarts實(shí)現(xiàn)可拖動(dòng)節(jié)點(diǎn)的折線圖(支持拖動(dòng)方向和上下限的設(shè)置),感興趣的朋友跟隨一起學(xué)習(xí)吧2019-04-04