<span id="mktg5"></span>

<i id="mktg5"><meter id="mktg5"></meter></i>

        <label id="mktg5"><meter id="mktg5"></meter></label>
        最新文章專(zhuān)題視頻專(zhuān)題問(wèn)答1問(wèn)答10問(wèn)答100問(wèn)答1000問(wèn)答2000關(guān)鍵字專(zhuān)題1關(guān)鍵字專(zhuān)題50關(guān)鍵字專(zhuān)題500關(guān)鍵字專(zhuān)題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關(guān)鍵字專(zhuān)題關(guān)鍵字專(zhuān)題tag2tag3文章專(zhuān)題文章專(zhuān)題2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章專(zhuān)題3
        問(wèn)答文章1 問(wèn)答文章501 問(wèn)答文章1001 問(wèn)答文章1501 問(wèn)答文章2001 問(wèn)答文章2501 問(wèn)答文章3001 問(wèn)答文章3501 問(wèn)答文章4001 問(wèn)答文章4501 問(wèn)答文章5001 問(wèn)答文章5501 問(wèn)答文章6001 問(wèn)答文章6501 問(wèn)答文章7001 問(wèn)答文章7501 問(wèn)答文章8001 問(wèn)答文章8501 問(wèn)答文章9001 問(wèn)答文章9501
        當(dāng)前位置: 首頁(yè) - 科技 - 知識(shí)百科 - 正文

        vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊

        來(lái)源:懂視網(wǎng) 責(zé)編:小采 時(shí)間:2020-11-27 22:23:34
        文檔

        vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊

        vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊:如果說(shuō)vue組件化開(kāi)發(fā)中第一步應(yīng)該了解的是什么的話,那無(wú)疑是父子組件之間是如何實(shí)現(xiàn)通訊的(說(shuō)白了就是父子組件中數(shù)據(jù)是如何傳遞的),只有理解了這一步,才能更好的開(kāi)發(fā)組件 這里先提出兩個(gè)關(guān)鍵詞: props 與 emit : 寫(xiě)這個(gè)組件之前,先看看效果圖: 組
        推薦度:
        導(dǎo)讀vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊:如果說(shuō)vue組件化開(kāi)發(fā)中第一步應(yīng)該了解的是什么的話,那無(wú)疑是父子組件之間是如何實(shí)現(xiàn)通訊的(說(shuō)白了就是父子組件中數(shù)據(jù)是如何傳遞的),只有理解了這一步,才能更好的開(kāi)發(fā)組件 這里先提出兩個(gè)關(guān)鍵詞: props 與 emit : 寫(xiě)這個(gè)組件之前,先看看效果圖: 組

        如果說(shuō)vue組件化開(kāi)發(fā)中第一步應(yīng)該了解的是什么的話,那無(wú)疑是父子組件之間是如何實(shí)現(xiàn)通訊的(說(shuō)白了就是父子組件中數(shù)據(jù)是如何傳遞的),只有理解了這一步,才能更好的開(kāi)發(fā)組件

        這里先提出兩個(gè)關(guān)鍵詞: props 與 emit :

        寫(xiě)這個(gè)組件之前,先看看效果圖:

         

        組件開(kāi)發(fā)分析:

        既然是組件:

      1. 首先組件內(nèi)部數(shù)據(jù)內(nèi)容肯定是可變的(如上圖中的"按時(shí)間排序"之類(lèi)的),這必須由父組件傳入(即父組件如何將數(shù)據(jù)傳個(gè)父組件);
      2. 在選擇了內(nèi)容之后,如何將數(shù)據(jù)傳出來(lái)(即子組件如何將數(shù)據(jù)傳給父組件)
      3. 先寫(xiě)結(jié)構(gòu):

        父組件

        <!--下拉框父組件-->
        <template>
         <div id="app">
         <oSelect @changeOption="onChangeOption" :selectData="selectData"></oSelect>
         <!--
         selectData: 傳入父組件需要傳入的數(shù)據(jù);格式:childDataName="parentDataName";
         onChangeOption: 子組件觸發(fā)的事件名,通過(guò)觸發(fā)一個(gè)事件從而來(lái)接收子組件的傳過(guò)來(lái)的數(shù)據(jù)
         格式:@childEventName="parentEventName"
         注:可寫(xiě)多個(gè)
         -->
         </div>
        </template>
        <script>
        import oSelect from "@/components/select.vue"; //引入組件
        export default{
         name: 'App',
         data(){
         return {
         selectData: {
         defaultIndex: 0, //默認(rèn)選中的是第幾個(gè)
         selectStatus: false, // 通過(guò)selectStatus來(lái)控制下拉框的顯示/隱藏
         selectOptions: [ // 下拉框中的數(shù)據(jù) name這樣的參數(shù),看項(xiàng)目是否有需求,可自行修改
         {
         name: 'time',
         context: '按時(shí)間排序'
         },
         {
         name: 'view',
         context: '按瀏覽量排序'
         },
         {
         name: 'like',
         context: '按點(diǎn)贊數(shù)排序'
         },
         {
         name: 'reply',
         context: '按回復(fù)數(shù)排序'
         },
         {
         name: 'reward',
         context: '按打賞數(shù)排序'
         }
         ]
         }
         }
         },
         methods:{
         onChangeOption(index){
         //子組件通過(guò)一個(gè)事件來(lái)觸發(fā)onChangeOption方法,從而傳遞一系列參數(shù),這里的index就是傳過(guò)來(lái)的
         this.selectData.defaultIndex = index;
         //觸發(fā)過(guò)后,動(dòng)態(tài)改變了需要值 
         }
         },
         components: {
         oSelect,
         //注冊(cè)組件
         }
        }
        </script>

        子組件

        <template>
        <!-- 下拉框組件html結(jié)構(gòu)(子組件) -->
        <div class="select-box" @click="changeStatus">
        <!-- changeStatus事件: 點(diǎn)擊實(shí)現(xiàn)下拉框的顯示和隱藏 -->
        <h3 class="select-title"
         :name="selectData.selectOptions[selectData.defaultIndex].name"
         :class="{'select-title-active': selectData.selectStatus}"> 
         <!--屬性name class的動(dòng)態(tài)綁定-->
         {{ selectData.selectOptions[selectData.defaultIndex].context }} 
         <!--這里主要綁定選擇的數(shù)據(jù)-->
        </h3>
        <transition name="slide-down">
        <!--transition 實(shí)現(xiàn)下拉列表顯示隱藏時(shí)的動(dòng)畫(huà)-->
        <ul class="select-options" v-show="selectData.selectStatus">
         <li class="select-option-item" 
         v-for="(item,index) in selectData.selectOptions"
         @click="EmitchangeOption(index)"
         :class="{'select-option-active':selectData.defaultIndex===index}">
         <!--
         v-for:循環(huán)數(shù)據(jù)渲染下拉列表
         EmitchangeOption:點(diǎn)擊下拉列表事件
         class:動(dòng)態(tài)綁定被選中的數(shù)據(jù)
         -->
         {{ selectData.selectOptions[index].context }}
         
         </li>
         <div class="arrow-top"></div>
        </ul> 
        </transition> 
        </div> 
        </template>
        <script>
        export default{
         name: 'oSelect', //建議大家都寫(xiě)上這個(gè),有利于我們知道這個(gè)組件叫什么名字
         //通過(guò)props來(lái)接收父組件傳過(guò)來(lái)的數(shù)據(jù)
         props:{
         selectData: {
         type: Object //規(guī)定傳過(guò)來(lái)的數(shù)據(jù)為對(duì)象,否則就會(huì)報(bào)錯(cuò)(其實(shí)這樣寫(xiě)就是規(guī)避錯(cuò)誤和良好的習(xí)慣)
         }
         },
         methods:{
         EmitchangeOption(index){
         this.$emit('changeOption',index);
         // 通過(guò)點(diǎn)擊事件觸發(fā)EmitchangeOption函數(shù),傳入當(dāng)前點(diǎn)擊下拉列表中的索引值index
         // 下拉框通過(guò)emit方法觸發(fā)父組件中changeOption函數(shù),動(dòng)態(tài)傳給父組件需要的數(shù)據(jù),這里為索引值
         },
         changeStatus(){
         // 通過(guò)changeStatus事件動(dòng)態(tài)改變selectStatus的值,從而控制下拉框的顯示隱藏
         this.selectData.selectStatus = !this.selectData.selectStatus
         }
         }
        }
        </script>

        總結(jié)

      4. 從以上的示例可以看出來(lái),父組件傳入數(shù)據(jù),需要在父組件中線綁定一個(gè)屬性,掛載需要傳入的數(shù)據(jù);
      5. 子組件接收父組件的數(shù)據(jù)通過(guò) props 方法來(lái)接收;
      6. 子組件傳遞數(shù)據(jù)需要使用 emit 方法來(lái)綁定父組件中事先設(shè)定好的方法,從而動(dòng)態(tài)傳遞操作后需要的數(shù)據(jù)
      7. 最終效果如下:

         

        附上組件中的css,僅供參考:

        .select-box{
         position: relative;
         max-width: 250px;
         line-height: 35px;
         margin: 50px auto;
        }
        .select-title{
         position: relative;
         padding: 0 30px 0 10px;
         border: 1px solid #d8dce5;
         border-radius: 5px;
         transition-duration: 300ms;
         cursor: pointer;
        }
        .select-title:after{
         content: '';
         position: absolute;
         height: 0;
         width: 0;
         border-top: 6px solid #d8dce5;
         border-left: 6px solid transparent;
         border-right: 6px solid transparent;
         right: 9px;
         top: 0;
         bottom: 0;
         margin: auto;
         transition-duration: 300ms;
         transition-timing-function: ease-in-out;
        }
        .select-title-active{
         border-color: #409eff;
        }
        .select-title-active:after{
         transform: rotate(-180deg);
         border-top-color: #409eff;
        }
        .select-options{
         position: absolute;
         padding:10px 0;
         top: 45px;
         border:1px solid #d8dce5;
         width: 100%;
         border-radius: 5px;
        }
        .select-option-item{
         padding:0 10px;
         cursor: pointer;
         transition-duration: 300ms;
        }
        .select-option-item:hover,.select-option-active{
         background: #f1f1f1;
         color: #409eff;
        }
        <!--箭頭css-->
        .arrow-top{
         position: absolute;
         height: 0;
         width: 0;
         top: -7px;
         border-bottom: 7px solid #d8dce5;
         border-left: 7px solid transparent;
         border-right: 7px solid transparent;
         left: 0;
         right: 0;
         margin: auto;
         z-index: 99;
        }
        .arrow-top:after{
         content: '';
         position: absolute;
         display: block;
         height: 0;
         width: 0;
         border-bottom: 6px solid #fff;
         border-left: 6px solid transparent;
         border-right: 6px solid transparent;
         left: -6px;
         top: 1px;
         z-index: 99;
        }
        <!--下拉框顯示隱藏動(dòng)畫(huà)-->
        .slide-down-enter-active,.slide-down-leave{
         transition: all .3s ease-in-out;
         transform-origin:0 top;
         transform: scaleY(1);
        }
        .slide-down-enter{
         transform: scaleY(0);
        }
        .slide-down-leave-active{
         transition: all .3s ease-in-out;
         transform-origin:0 top;
         transform: scaleY(0);
        }

        總結(jié)

        以上所述是小編給大家介紹的vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊,希望對(duì)大家有所幫助,如果大家有任何疑問(wèn)請(qǐng)給我留言,小編會(huì)及時(shí)回復(fù)大家的。在此也非常感謝大家對(duì)腳本之家網(wǎng)站的支持!

        聲明:本網(wǎng)頁(yè)內(nèi)容旨在傳播知識(shí),若有侵權(quán)等問(wèn)題請(qǐng)及時(shí)與本網(wǎng)聯(lián)系,我們將在第一時(shí)間刪除處理。TEL:177 7030 7066 E-MAIL:11247931@qq.com

        文檔

        vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊

        vue 通過(guò)下拉框組件學(xué)習(xí)vue中的父子通訊:如果說(shuō)vue組件化開(kāi)發(fā)中第一步應(yīng)該了解的是什么的話,那無(wú)疑是父子組件之間是如何實(shí)現(xiàn)通訊的(說(shuō)白了就是父子組件中數(shù)據(jù)是如何傳遞的),只有理解了這一步,才能更好的開(kāi)發(fā)組件 這里先提出兩個(gè)關(guān)鍵詞: props 與 emit : 寫(xiě)這個(gè)組件之前,先看看效果圖: 組
        推薦度:
        標(biāo)簽: VUE 通訊 通信
        • 熱門(mén)焦點(diǎn)

        最新推薦

        猜你喜歡

        熱門(mén)推薦

        專(zhuān)題
        Top
        主站蜘蛛池模板: 国产成人亚洲精品青草天美| 吃奶摸下高潮60分钟免费视频| 亚洲人成网77777亚洲色| 国产综合激情在线亚洲第一页| 四虎成人免费大片在线| 亚洲精品精华液一区二区| 妞干网在线免费视频| 欧洲亚洲国产精华液| 国产一级一片免费播放i| 特黄aa级毛片免费视频播放| 精品亚洲视频在线观看| 国产性生大片免费观看性| 亚洲AV无码成人网站久久精品大 | 国产精品免费久久| 在线a亚洲v天堂网2019无码| 中文字幕乱码免费看电影| 亚洲四虎永久在线播放| 一级女人18毛片免费| 亚洲AV无码AV男人的天堂不卡| 午夜亚洲福利在线老司机| 野花香高清视频在线观看免费| 亚洲理论在线观看| 成年男女免费视频网站| 免费手机在线看片| 91亚洲va在线天线va天堂va国产 | 亚洲高清无码专区视频| 你懂的免费在线观看| 亚洲高清在线mv| 欧洲精品免费一区二区三区| fc2免费人成为视频| 亚洲成a人片7777| 亚洲精品乱码久久久久久蜜桃 | 国产精成人品日日拍夜夜免费| 亚洲人色大成年网站在线观看| 全亚洲最新黄色特级网站| 久9久9精品免费观看| 亚洲成a人片在线观看天堂无码 | 中文文字幕文字幕亚洲色| 亚洲精品美女久久久久99小说| 午夜免费1000部| 国产精品美女久久久免费 |