最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2017年08月01日 14:52:08   作者:Yunfly  
本篇文章主要介紹了Vue2.0 組件傳值通訊的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

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

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

示例如下:


這里先說一下組件設(shè)計思路:

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

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

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

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

JudgeOf組件:

基本的外框,循環(huán)starList構(gòu)成三個評分選項。向子組件傳遞選項名字,和當(dāng)前選項的索引

<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> 評價內(nèi)容
  </div>
  <div class="bgfff container font14">
  <textarea placeholder="請輸入您的評價,方便我們改進(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)時度',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,當(dāng)點擊某一個星星時,StarImg組件emit當(dāng)前星星的index,JudgeStar組件中接收此參數(shù)并賦值給chooseIndex,同時StarImg里面watch這個參數(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é)一下:

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

以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • vue實現(xiàn)四級導(dǎo)航及驗證碼的方法實例

    vue實現(xiàn)四級導(dǎo)航及驗證碼的方法實例

    我們在做項目經(jīng)常會遇到多級導(dǎo)航這個需求,所以下面這篇文章主要給大家介紹了關(guān)于vue實現(xiàn)四級導(dǎo)航及驗證碼的相關(guān)資料,文章通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2021-07-07
  • 使用vue.js開發(fā)時一些注意事項

    使用vue.js開發(fā)時一些注意事項

    使用vue.js進(jìn)行項目的開發(fā)已經(jīng)有了一定的時間,在任務(wù)的過程中以及和不同的開發(fā)使用者交流中,逐漸對vue.js的使用心得有了一定的積累。本文主要給大家分享一些開發(fā)時需要注意的事項
    2016-04-04
  • vue組件屬性(props)及私有數(shù)據(jù)data解析

    vue組件屬性(props)及私有數(shù)據(jù)data解析

    這篇文章主要介紹了vue組件屬性(props)及私有數(shù)據(jù)data解析,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-10-10
  • Vuex 入門教程

    Vuex 入門教程

    這篇文章主要介紹了Vuex 入門教程,Vuex 是一個專為 Vue.js 應(yīng)用程序開發(fā)的狀態(tài)管理模式, 那這個 vuex 怎么用呢?就具體來看一下吧
    2018-01-01
  • Vue+ElementUI 中級聯(lián)選擇器Bug問題的解決

    Vue+ElementUI 中級聯(lián)選擇器Bug問題的解決

    這篇文章主要介紹了Vue+ElementUI 中級聯(lián)選擇器Bug問題的解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2020-07-07
  • vue項目前端加前綴(包括頁面及靜態(tài)資源)的操作方法

    vue項目前端加前綴(包括頁面及靜態(tài)資源)的操作方法

    這篇文章主要介紹了vue項目前端加前綴(包括頁面及靜態(tài)資源)的操作方法,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友參考下吧
    2023-12-12
  • Vue中的百度地圖定位BMap.GeolocationControl的用法

    Vue中的百度地圖定位BMap.GeolocationControl的用法

    BMap.GeolocationControl?是百度地圖API中的一個類,用于添加地理定位控件到地圖上,以便用戶可以通過該控件獲取自己的當(dāng)前位置,本文給大家介紹Vue中的百度地圖定位BMap.GeolocationControl的用法,感興趣的朋友跟隨小編一起看看吧
    2023-10-10
  • 淺談VUE-CLI腳手架熱更新太慢的原因和解決方法

    淺談VUE-CLI腳手架熱更新太慢的原因和解決方法

    今天小編就為大家分享一篇淺談VUE-CLI腳手架熱更新太慢的原因和解決方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2018-09-09
  • vue3中<script?setup>?和?setup函數(shù)的區(qū)別對比

    vue3中<script?setup>?和?setup函數(shù)的區(qū)別對比

    這篇文章主要介紹了vue3中<script?setup>?和?setup函數(shù)的區(qū)別,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-04-04
  • vue3前端獲取文件的絕對路徑問題解決

    vue3前端獲取文件的絕對路徑問題解決

    這篇文章主要給大家介紹了關(guān)于vue3前端獲取文件的絕對路徑問題解決的相關(guān)資料,文中通過代碼示例介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-09-09

最新評論

阿拉善右旗| 建瓯市| 镇远县| 微博| 遂溪县| 壶关县| 伊金霍洛旗| 宜兰市| 襄城县| 民乐县| 海门市| 内黄县| 威信县| 神农架林区| 高台县| 阳东县| 岳池县| 休宁县| 竹山县| 大姚县| 盐源县| 监利县| 吐鲁番市| 宁武县| 鄯善县| 商城县| 咸宁市| 英山县| 城固县| 陕西省| 辽中县| 华坪县| 石台县| 改则县| 炎陵县| 洱源县| 七台河市| 拉孜县| 岳池县| 新竹市| 岗巴县|