<template><divclass="row"><!-- 展示用户列表 --><divv-show="info.users.length"class="card"v-for="user in info.users":key="user.login"><a:href="user.html_url"target="_blank"><img:src="user.avatar_url"style='width: 100px'/></a><pclass="card-text">{{user.login}}</p></div><!-- 展示欢迎词 --><h1v-show="info.isFirst">欢迎使用!</h1><!-- 展示加载中 --><h1v-show="info.isLoading">加载中....</h1><!-- 展示错误信息 --><h1v-show="info.errMsg">{{info.errMsg}}</h1></div></template><script>exportdefault{name:'List',data(){return{info:{isFirst:true,isLoading:false,errMsg:'',users:[]}}},mounted(){this.$bus.$on('updateListData',(dataObj)=>{this.info ={...this.info,...dataObj}})},}</script><stylescoped>.album{min-height: 50rem;/* Can be removed; just added for demo purposes */padding-top: 3rem;padding-bottom: 3rem;background-color: #f7f7f7;}.card{float: left;width: 33.333%;padding: .75rem;margin-bottom: 2rem;border: 1px solid #efefef;text-align: center;}.card > img{margin-bottom: .75rem;border-radius: 100px;}.card-text{font-size: 85%;}</style>
Search.vue
<template><sectionclass="jumbotron"><h3class="jumbotron-heading">Search Github Users</h3><div><inputtype="text"placeholder="enter the name you search"v-model="keyWord"/> <button@click="searchUsers">Search</button></div></section></template><script>exportdefault{name:'Search',data(){return{keyWord:''}},methods:{searchUsers(){//请求前更新List的数据this.$bus.$emit('updateListData',{isLoading:true,errMsg:'',users:[],isFirst:false})this.$http.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(response=>{
console.log('请求成功了')//请求成功后更新List的数据this.$bus.$emit('updateListData',{isLoading:false,errMsg:'',users:response.data.items})},error=>{//请求后更新List的数据this.$bus.$emit('updateListData',{isLoading:false,errMsg:error.message,users:[]})})}},}</script>
App.vue
<template><divclass="container"><Search/><List/></div></template><script>import Search from'./components/Search'import List from'./components/List'exportdefault{name:'App',components:{Search,List}}</script>