 
      
      2023-1-5 前端達人
前言:
本次案例是一個基于 Vue2 的全局事件總線通信的仿 Github 用戶搜索模塊,使用的接口是 Github 官方提供的搜索接口: https://api.github.com/search/users?q=xxx(發(fā)送請求時需要將輸入的用戶名稱綁定替換掉xxx),如果對全局事件總線不太熟練的小伙伴可以看這篇文章:http://t.csdn.cn/oHEOW
http://t.csdn.cn/oHEOW
     
 
     
 
     
 
     
 
     
 
代碼共分為了兩個子組件,一個是搜索組件(Search),另一個是列表組件(List),其次search組件中輸入框v-model雙向數(shù)據(jù)綁定,點擊搜索后開始查詢,其中過程分為了四步:第一是未搜索的歡迎頁面背景,第二是請求未加載出來的loading背景,第三是渲染用戶列表,第四是請求失敗的報錯提示頁面背景。
綁定自定義事件在List組件中,data中的數(shù)據(jù)是定義了userinfo對象來存放其四個狀態(tài)的布爾值,后續(xù)的數(shù)據(jù)傳遞是直接傳遞userinfo這個對象,使用 $on 綁定自定義事件 getuserinfo,當這個事件觸發(fā)時執(zhí)行后面的箭頭回調(diào)函數(shù),將傳遞來的對象接收并覆蓋掉data中原有的四個狀態(tài)布爾值。
 
    - 
        
            
            
        
        
            
                <script>
            
        
    
- 
        
            
            
        
        
            
                export default {
            
        
    
- 
        
            
            
        
        
            
                name:'List',
            
        
    
- 
        
            
            
        
        
            
                data() {
            
        
    
- 
        
            
            
        
        
            
                return {
            
        
    
- 
        
            
            
        
        
            
                UserInfo:{
            
        
    
- 
        
            
            
        
        
            
                iswelcome:true,
            
        
    
- 
        
            
            
        
        
            
                isloading:false,
            
        
    
- 
        
            
            
        
        
            
                users:'',
            
        
    
- 
        
            
            
        
        
            
                error:'' 
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                },
            
        
    
- 
        
            
            
        
        
            
                mounted(){
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$on('getUserInfo',(datas)=>{
            
        
    
- 
        
            
            
        
        
            
                // console.log('list組件收到了傳來的用戶數(shù)據(jù)',res); 
            
        
    
- 
        
            
            
        
        
            
                this.UserInfo=datas
            
        
    
- 
        
            
            
        
        
            
                console.log(datas);
            
        
    
- 
        
            
            
        
        
            
                })
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                </script>
            
        
    
點擊搜索按鈕即可使用 $emit 觸發(fā)自定義事件,在請求成功前會將 isloading 改為true,其余改為false進行數(shù)據(jù)傳遞,傳遞給 list 組件后期就會顯示出loading的背景頁面,其余同理
 
    - 
        
            
            
        
        
            
                <script>
            
        
    
- 
        
            
            
        
        
            
                export default {
            
        
    
- 
        
            
            
        
        
            
                name:'Search',
            
        
    
- 
        
            
            
        
        
            
                data(){
            
        
    
- 
        
            
            
        
        
            
                return {
            
        
    
- 
        
            
            
        
        
            
                ipt_value:'',
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                },
            
        
    
- 
        
            
            
        
        
            
                methods:{
            
        
    
- 
        
            
            
        
        
            
                search(){
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$emit('getUserInfo',{iswelcome:false,isloading:true,users:'',error:''})
            
        
    
- 
        
            
            
        
        
            
                this.$axios.get(`https://api.github.com/search/users?q=${this.ipt_value}`).then(
            
        
    
- 
        
            
            
        
        
            
                response => {
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$emit('getUserInfo',{iswelcome:false,isloading:false,users:response.data.items,error:''})
            
        
    
- 
        
            
            
        
        
            
                },
            
        
    
- 
        
            
            
        
        
            
                error => {
            
        
    
- 
        
            
            
        
        
            
                console.log(error);
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$emit('getUserInfo',{iswelcome:false,isloading:false,users:'',error:error})
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                )
            
        
    
- 
        
            
            
        
        
            
                this.ipt_value='' 
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                </script>
            
        
    
- 
        
        
    
前言:
本次案例是一個基于 Vue2 的全局事件總線通信的仿 Github 用戶搜索模塊,使用的接口是 Github 官方提供的搜索接口: https://api.github.com/search/users?q=xxx(發(fā)送請求時需要將輸入的用戶名稱綁定替換掉xxx),如果對全局事件總線不太熟練的小伙伴可以看這篇文章:http://t.csdn.cn/oHEOW
http://t.csdn.cn/oHEOW
     
 
     
 
     
 
     
 
     
 
代碼共分為了兩個子組件,一個是搜索組件(Search),另一個是列表組件(List),其次search組件中輸入框v-model雙向數(shù)據(jù)綁定,點擊搜索后開始查詢,其中過程分為了四步:第一是未搜索的歡迎頁面背景,第二是請求未加載出來的loading背景,第三是渲染用戶列表,第四是請求失敗的報錯提示頁面背景。
綁定自定義事件在List組件中,data中的數(shù)據(jù)是定義了userinfo對象來存放其四個狀態(tài)的布爾值,后續(xù)的數(shù)據(jù)傳遞是直接傳遞userinfo這個對象,使用 $on 綁定自定義事件 getuserinfo,當這個事件觸發(fā)時執(zhí)行后面的箭頭回調(diào)函數(shù),將傳遞來的對象接收并覆蓋掉data中原有的四個狀態(tài)布爾值。
 
    - 
        
            
            
        
        
            
                <script>
            
        
    
- 
        
            
            
        
        
            
                export default {
            
        
    
- 
        
            
            
        
        
            
                name:'List',
            
        
    
- 
        
            
            
        
        
            
                data() {
            
        
    
- 
        
            
            
        
        
            
                return {
            
        
    
- 
        
            
            
        
        
            
                UserInfo:{
            
        
    
- 
        
            
            
        
        
            
                iswelcome:true,
            
        
    
- 
        
            
            
        
        
            
                isloading:false,
            
        
    
- 
        
            
            
        
        
            
                users:'',
            
        
    
- 
        
            
            
        
        
            
                error:'' 
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                },
            
        
    
- 
        
            
            
        
        
            
                mounted(){
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$on('getUserInfo',(datas)=>{
            
        
    
- 
        
            
            
        
        
            
                // console.log('list組件收到了傳來的用戶數(shù)據(jù)',res); 
            
        
    
- 
        
            
            
        
        
            
                this.UserInfo=datas
            
        
    
- 
        
            
            
        
        
            
                console.log(datas);
            
        
    
- 
        
            
            
        
        
            
                })
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                </script>
            
        
    
點擊搜索按鈕即可使用 $emit 觸發(fā)自定義事件,在請求成功前會將 isloading 改為true,其余改為false進行數(shù)據(jù)傳遞,傳遞給 list 組件后期就會顯示出loading的背景頁面,其余同理
 
    - 
        
            
            
        
        
            
                <script>
            
        
    
- 
        
            
            
        
        
            
                export default {
            
        
    
- 
        
            
            
        
        
            
                name:'Search',
            
        
    
- 
        
            
            
        
        
            
                data(){
            
        
    
- 
        
            
            
        
        
            
                return {
            
        
    
- 
        
            
            
        
        
            
                ipt_value:'',
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                },
            
        
    
- 
        
            
            
        
        
            
                methods:{
            
        
    
- 
        
            
            
        
        
            
                search(){
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$emit('getUserInfo',{iswelcome:false,isloading:true,users:'',error:''})
            
        
    
- 
        
            
            
        
        
            
                this.$axios.get(`https://api.github.com/search/users?q=${this.ipt_value}`).then(
            
        
    
- 
        
            
            
        
        
            
                response => {
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$emit('getUserInfo',{iswelcome:false,isloading:false,users:response.data.items,error:''})
            
        
    
- 
        
            
            
        
        
            
                },
            
        
    
- 
        
            
            
        
        
            
                error => {
            
        
    
- 
        
            
            
        
        
            
                console.log(error);
            
        
    
- 
        
            
            
        
        
            
                this.$bus.$emit('getUserInfo',{iswelcome:false,isloading:false,users:'',error:error})
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                )
            
        
    
- 
        
            
            
        
        
            
                this.ipt_value='' 
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                }
            
        
    
- 
        
            
            
        
        
            
                </script>
            
        
    
來源:csdn  藍藍設(shè)計建立了UI設(shè)計分享群,每天會分享國內(nèi)外的一些優(yōu)秀設(shè)計,如果有興趣的話,可以進入一起成長學習,請加微信ban_lanlan,報下信息,藍小助會請您入群。歡迎您加入噢~~ 希望得到建議咨詢、商務(wù)合作,也請與我們聯(lián)系01063334945。  分享此文一切功德,皆悉回向給文章原作者及眾讀者. 免責聲明:藍藍設(shè)計尊重原作者,文章的版權(quán)歸原作者。如涉及版權(quán)問題,請及時與我們?nèi)〉寐?lián)系,我們立即更正或刪除。  藍藍設(shè)計( m.monmeltingpot.net )是一家專注而深入的界面設(shè)計公司,為期望卓越的國內(nèi)外企業(yè)提供卓越的UI界面設(shè)計、BS界面設(shè)計 、 cs界面設(shè)計 、 ipad界面設(shè)計 、 包裝設(shè)計 、 圖標定制 、 用戶體驗 、交互設(shè)計、 網(wǎng)站建設(shè) 、平面設(shè)計服務(wù)、UI設(shè)計公司、界面設(shè)計公司、UI設(shè)計服務(wù)公司、數(shù)據(jù)可視化設(shè)計公司、UI交互設(shè)計公司、高端網(wǎng)站設(shè)計公司、UI咨詢、用戶體驗公司、軟件界面設(shè)計公司藍藍設(shè)計的小編 http://m.monmeltingpot.net