• <fieldset id="8imwq"><menu id="8imwq"></menu></fieldset>
  • <bdo id="8imwq"><input id="8imwq"></input></bdo>
    最新文章專題視頻專題問答1問答10問答100問答1000問答2000關鍵字專題1關鍵字專題50關鍵字專題500關鍵字專題1500TAG最新視頻文章推薦1 推薦3 推薦5 推薦7 推薦9 推薦11 推薦13 推薦15 推薦17 推薦19 推薦21 推薦23 推薦25 推薦27 推薦29 推薦31 推薦33 推薦35 推薦37視頻文章20視頻文章30視頻文章40視頻文章50視頻文章60 視頻文章70視頻文章80視頻文章90視頻文章100視頻文章120視頻文章140 視頻2關鍵字專題關鍵字專題tag2tag3文章專題文章專題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專題3
    問答文章1 問答文章501 問答文章1001 問答文章1501 問答文章2001 問答文章2501 問答文章3001 問答文章3501 問答文章4001 問答文章4501 問答文章5001 問答文章5501 問答文章6001 問答文章6501 問答文章7001 問答文章7501 問答文章8001 問答文章8501 問答文章9001 問答文章9501
    當前位置: 首頁 - 科技 - 知識百科 - 正文

    Vue2.0 組件傳值通訊的示例代碼

    來源:懂視網 責編:小采 時間:2020-11-27 22:33:39
    文檔

    Vue2.0 組件傳值通訊的示例代碼

    Vue2.0 組件傳值通訊的示例代碼:在Vue項目中,我們經常把某個功能模塊封裝起來,形成組件,下次調用時非常方便,同時也是在一些循環中進行dom操作的一種較好方式。 本次我想以一個評價組件來說一下組件的事件和參數是怎樣傳遞的,如何完成的組件通訊。 示例如下: 這里先說一下組件設計思
    推薦度:
    導讀Vue2.0 組件傳值通訊的示例代碼:在Vue項目中,我們經常把某個功能模塊封裝起來,形成組件,下次調用時非常方便,同時也是在一些循環中進行dom操作的一種較好方式。 本次我想以一個評價組件來說一下組件的事件和參數是怎樣傳遞的,如何完成的組件通訊。 示例如下: 這里先說一下組件設計思

    在Vue項目中,我們經常把某個功能模塊封裝起來,形成組件,下次調用時非常方便,同時也是在一些循環中進行dom操作的一種較好方式。

    本次我想以一個評價組件來說一下組件的事件和參數是怎樣傳遞的,如何完成的組件通訊。

    示例如下:


    這里先說一下組件設計思路:

    明確整個功能場景,找出存在的事件操作,此例是一個簡單的評價功能,即點擊某一個星星時左邊以及當前為選中的黃色星,右邊為未選中的白色星。

    確定可復用的組件,即具有重復操作的模塊,這里明顯的每一個星星為一個可復用組件, 其實還有個星星變成白色和黃色也是一個小組件,這種在具體寫的時候覺得可以再分即可。

    至此一個劃分了三個組件:JudgeOf、JudgeStar、StarImg

    這里需要明確的是,在大多數的組件通訊中,父組件往子組件傳遞的都是數據,子組件往父組件傳遞的才是事件,
    我們姑且稱父到子走的是一個數據流,子到父走的是一個事件流,了解這一點基本可以很好的了解組件通訊的情況。

    JudgeOf組件:

    基本的外框,循環starList構成三個評分選項。向子組件傳遞選項名字,和當前選項的索引

    <template>
     <div>
     <div class="judge-modal" @click="cancel"></div>
     <div class="judge">
     <br>
     <div class="text-center font16">評價</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> 評價內容
     </div>
     <div class="bgfff container font14">
     <textarea placeholder="請輸入您的評價,方便我們改進,謝謝!" 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:'服務態度',key:'evaluate.serviceStarLevel'},
     {name:'責任感',key:'evaluate.dutyStarLevel'},
     {name:'準時度',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組件:

    在這里注冊一個chooseIndex,當點擊某一個星星時,StarImg組件emit當前星星的index,JudgeStar組件中接收此參數并賦值給chooseIndex,同時StarImg里面watch這個參數,大于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, //當前星星的索引
     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>
    
    

    總結一下:

    1. 父組件通過v-bind:綁定參數傳給子組件,子組件通過props接受這個參數。
    2. 在組件的最底層開始寫事件,由最底層組件逐步向上$emit事件流,并攜帶相應參數,最后在父組件內完成總的數據處理。

    聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

    文檔

    Vue2.0 組件傳值通訊的示例代碼

    Vue2.0 組件傳值通訊的示例代碼:在Vue項目中,我們經常把某個功能模塊封裝起來,形成組件,下次調用時非常方便,同時也是在一些循環中進行dom操作的一種較好方式。 本次我想以一個評價組件來說一下組件的事件和參數是怎樣傳遞的,如何完成的組件通訊。 示例如下: 這里先說一下組件設計思
    推薦度:
    標簽: VUE 代碼 通信
    • 熱門焦點

    最新推薦

    猜你喜歡

    熱門推薦

    專題
    Top
    主站蜘蛛池模板: 久久精品人人做人人爽电影蜜月| 成人伊人精品色XXXX视频| 亚洲精品无码成人片久久| 久久久久久久久久久免费精品| 精品人妻V?出轨中文字幕| 精品人人妻人人澡人人爽人人| 老湿亚洲永久精品ww47香蕉图片| 久久精品一区二区| 久久国产免费观看精品3| 亚洲AV蜜桃永久无码精品| 无码人妻精品中文字幕免费| 黑人巨茎精品欧美一区二区 | 精品日韩亚洲AV无码| 亚洲欧美日韩久久精品| 麻豆精品三级全部视频 | 国产午夜精品理论片久久影视| 亚洲处破女AV日韩精品| 欧美久久亚洲精品| 国产亚洲精品看片在线观看| 成人午夜精品久久久久久久小说 | 国产精品丝袜一区二区三区 | 久草视频精品在线| 国产国产成人久久精品| 欧美精品亚洲精品日韩| 国产精品网站在线观看| 国产亚洲精品岁国产微拍精品| 久久精品国产亚洲AV电影| 亚洲精品无码不卡在线播放HE| 综合精品欧美日韩国产在线| 亚洲日韩中文在线精品第一| 午夜在线视频91精品| 四虎亚洲国产成人久久精品| 欧洲精品码一区二区三区免费看 | 国产精品亚洲成在人线| 久久国产免费观看精品3| 孩交VIDEOS精品乱子| 69久久夜色精品国产69| 国产精品宾馆在线精品酒店| 久久亚洲精品视频| 999久久久免费国产精品播放| 午夜一级日韩精品制服诱惑我们这边|