Vue38-Github用户搜素案例

Vue38-Github用户搜素案例

<template>
 <div class="row">
  <!-- 展示用户列表 -->
  <div v-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>
   <p class="card-text">{{user.login}}</p>
  </div>
  <!-- 展示欢迎词 -->
  <h1 v-show="info.isFirst">欢迎使用!</h1>
  <!-- 展示加载中 -->
  <h1 v-show="info.isLoading">加载中....</h1>
  <!-- 展示错误信息 -->
  <h1 v-show="info.errMsg">{{info.errMsg}}</h1>
 </div>
</template>

<script>
 export default {
  name:'List',
  data() {
   return {
    info:{
     isFirst:true,
     isLoading:false,
     errMsg:'',
     users:[]
    }
   }
  },
  mounted() {
   this.$bus.$on('updateListData',(dataObj)=>{
    this.info = {...this.info,...dataObj}
   })
  },
 }
</script>

<style scoped>
 .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>
<template>
 <section class="jumbotron">
  <h3 class="jumbotron-heading">Search Github Users</h3>
  <div>
   <input type="text" placeholder="enter the name you search" v-model="keyWord"/>&nbsp;
   <button @click="searchUsers">Search</button>
  </div>
 </section>
</template>

<script>
 import axios from 'axios'
 export default {
  name:'Search',
  data() {
   return {
    keyWord:''
   }
  },
  methods: {
   searchUsers(){
    //请求前更新List的数据
    this.$bus.$emit('updateListData',{isLoading:true,errMsg:'',users:[],isFirst:false})
    axios.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>
<template>
 <div class="container">
  <Search/>
  <List/>
 </div>
</template>

<script>
 import Search from './components/Search'
 import List from './components/List'
 export default {
  name:'App',
  components:{Search,List}
 }
</script>
//引入Vue
import Vue from 'vue'
//引入App
import App from './App.vue'
//关闭Vue的生产提示
Vue.config.productionTip = false

//创建vm
new Vue({
 el:'#app',
 render: h => h(App),
 beforeCreate() {
  Vue.prototype.$bus = this
 },
})
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

MarxistVive

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值