axios请求

效果图

 

 

安装axios

npm i axios

 

 

search组件:

<template>
  <div class="search">
    <section class="jumbotron">
      <h3 class="jumbotron-heading">Search Github Users</h3>
      <div>
        <input
          type="text"
          placeholder="enter the name you search"
          v-model="inputWord"
        />&nbsp;
        <button @click="search">Search</button>
      </div>
    </section>
  </div>
</template>

<script>
import axios from 'axios';
export default {
  name: "Search",
  data(){
    return{
      inputWord:''
    }
  },
  methods:{
    search(){
      //请求前更新List的数据
      this.$bus.$emit('getUsers',{isFirst:false,isLoading:true,errmsg:'',users:[]})
      axios.get(`https://api.github.com/search/users?q=${this.inputWord}`).then(
        response =>{
          //console.log('请求成功',response.data.items);
          this.$bus.$emit('getUsers',{isLoading:false,errmsg:'',users:response.data.items})
        },
        error =>{
          console.log('获取失败',error.message)
          //用户要清空
          this.$bus.$emit('getUsers',{isLoading:false,errmsg:error.message,users:[]})
        }
      )
    }
  }
};
</script>

list组件:

<template>
  <div class="list">
    <!--展示用户列表-->
    <div class="row">
      <div class="card" v-for="item in info.users" :key="item.login">
        <a :href="item.html_url" target="_blank">
          <img
            :src="item.avatar_url"
            style="width: 100px"
          />
        </a>
        <p class="card-text">{{item.login}}</p>
      </div>
    </div>
    <!--展示欢迎词-->
    <h1 v-show="info.isFirst">欢迎...........</h1>
    <!--展示加载中-->
    <h2 v-show="info.isLoading">loading.....</h2>
    <!--展示错误-->
    <h2 v-show="info.errmsg">{{info.errmsg}}</h2>
  </div>
</template>

<script>
export default {
  name: "List",
  data(){
    return{
      info:{
        users:[],
        isFirst:true,
        isLoading:false,
        errmsg:""
      }
    }
  },
  mounted(){
    this.$bus.$on('getUsers',(dataObj)=>{
      //对象合并
      this.info = {...this.info,...dataObj}
    })
  },
  beforeDestroy(){
    this.$bus.$off('getUsers')
  }
};
</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>

 

posted @ 2021-09-21 18:05  幻影之舞  阅读(63)  评论(0)    收藏  举报