【Vue】 第十五部分 GitHub用户查询案例

【Vue】 第十五部分 GitHub用户查询案例



15.GitHub用户查询案例

需要源码的点击这里

15.1 案例展示

在这里插入图片描述

15.2 组件拆分示例图片

在这里插入图片描述


15.3 代码

main.js

import Vue from "vue"
import App from "./App.vue"

Vue.config.productionTip = false   //阻止vue在生成时自动产生提示
new Vue({
    el: '#app',
    data: {
        
    },
    render: h => h(App),
    beforeCreate(){
        Vue.prototype.$bus = this  //绑定事件总线
    }
})

App.vue

<template>
  <div class="container">
   <search/>
    <list/>
  </div>
</template>

<script>
import search from "./components/search.vue"
import list from "./components/list.vue"
export default {
    components:{search,list}
}
</script>

<style>

</style>

search.vue

<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="obtainData">Search</button>
      </div>
    </section>
</template>

<script>
import axios from "axios"
export default {
    data(){
      return{
        keyword:""
      }
    },
    methods:{
      // 点击事件
      obtainData(){
        // 初始化列表
        this.$bus.$emit("getinfo",{},{isFirst:false,isLoading:true,isError:''})

        // 向接口发送请求获取数据
        axios.get(`https://api.github.com/search/users?q=${this.keyword}`).then(
          response =>{
            console.log("请求成功!");
              this.$bus.$emit("getinfo",response.data.items,{isFirst:false,isLoading:false,isError:''})
          },
          error => {
            console.log("请求失败!",error.message)
          }
        )

      }
    }
}
</script>

<style>

</style>

list.vue

<template>
      <div class="row">
        <div class="card" v-for="user in userinfo" :key="user.id">
            <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="status.isFirst">Welcome to use!!!</h1>
        <h1 v-show="status.isLoading">Loading...</h1>
    </div>
</template>

<script>
export default {
  data(){
    return{
      userinfo:[],
      status:{
        isFirst:true,
        isLoading:false,
        isError:false
      }
    }
  },
  mounted(){
    this.$bus.$on("getinfo",(userinfo,status)=>{  
      this.userinfo = userinfo  
      this.status = status
    })
  }
}
</script>

<style>
.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>

总结

以上就是今天要讲的内容,大家可以拿去练手,希望对大家有所帮助!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值