编写小的demo应用axios异步请求.

效果图示:



功能: 用户在输入框中输入信息进行搜索,并搜索状态随之改变(四种状态).

项目目录:



代码:

1.index.html

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width,initial-scale=1.0">
<title>vue_demo</title>
<link rel="stylesheet" href="./static/css/bootstrap.css">
</head>
<body>
<div id="app"></div>
<!-- built files will be auto injected -->
</body>
</html>

2.main.js

import Vue from 'vue'
import App from './App' new Vue({
el: '#app',
components: { App },
template: '<App/>'
})

3.App.vue

<template>
<div class="container">
<Search/>
<users-main/>
</div>
</template> <script>
import Search from './components/Search'
import Main from './components/Main' export default { data () {
return { }
}, components: {
Search,
UsersMain: Main
} }
</script> <style> </style>

4.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="searchName"/>
<button @click="search">Search</button>
</div>
</section>
</template> <script>
import PubSub from 'pubsub-js' export default {
data() {
return {
searchName: ''
}
},
methods: {
search() {
// 获取输入信息
const searchName = this.searchName.trim()
// console.log(searchName)
if (searchName){ // 当不为空字符串时
PubSub.publish('searchInfo', searchName) // 发布搜索的消息:消息名和数据
}
}
}
}
</script> <style> </style>

5.Main.vue

<template>
<div>
<h2 v-if="firstView">请输入用户名进行搜素</h2>
<h2 v-if="loading">Loading...</h2>
<h2 v-if="errorMsg">{{errorMsg}}</h2>
<div class="row">
<div class="card" v-for="(user,index) in users" :key="index">
<a :href="user.url" target="_blank">
<img :src="user.avatar_url" style='width: 100px'/>
</a>
<p class="card-text">{{user.name}}</p>
</div> </div>
</div>
</template> <script>
import PubSub from 'pubsub-js'
import axios from 'axios' export default {
data() {
return {
firstView: true,
loading: false,
users: null, // [{url: '', avatar_url: '', name: ''}]
errorMsg: ''
}
},
mounted() {
// 订阅搜索的消息,绑定监听; 在点击search按钮后发送ajax请求
PubSub.subscribe('searchInfo',(msg, searchName) =>{
// 定义url
const url = ` https://api.github.com/search/users?q=${searchName}` // 更新状态(请求中)
this.firstView = false
this.loading = true
this.users = null // 这里需重新设置为null,不然加载时会显示上一次users信息
this.errorMsg = '' // 发送ajax请求
axios.get(url).then(response => {
// 请求成功
const result = response.data
const users = result.items.map(item => ({
url: item.html_url,
avatar_url: item.avatar_url,
name: item.login
})) // 更新状态(成功)
this.loading = false
this.users = users }).catch(error => {
// 请求失败(失败)
this.loading = false
this.errorMsg = '请求失败' })
})
}
}
</script> <style>
.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>

最新文章

  1. django request对象和HttpResponse对象
  2. JVM实用参数(八)GC日志
  3. 关于RPC与MQ异同的理解
  4. Cocos2d-x 3.2学习笔记(三)学习绘图API
  5. e.stopPropagation();与 e.preventDefault();
  6. [转]Eclipse中的Web项目自动部署到Tomcat
  7. Android 优化List图片显示
  8. Daily Scrum 12.2
  9. CSU OJ PID=1514: Packs 超大背包问题,折半枚举+二分查找。
  10. Postman 安装 &amp; 资料
  11. IOS 下雪动画修改版本
  12. DB2 “The transaction log for the database is full” 存在的问题及解决方案
  13. JVM笔记5-对象的访问定位。
  14. 缺陷的背后---LIMIT M,N 分页查找
  15. php 生成静态页面
  16. CoffeeScript简介 &lt;二&gt;
  17. 前端框架VUE----对象的单体模式
  18. spark sql运行原理
  19. HBase:分布式列式NoSQL数据库
  20. java struts2入门学习实例--用户注册和用户登录整合

热门文章

  1. vue使用 router-link 时点击不能跳转问题
  2. Codeforces 950C Zebras ( 贪心 &amp;&amp; 模拟 )
  3. java语言课堂动手动脑
  4. 线下作业MySQL #20175201
  5. springboot+druid+mybatis-Plus 配置详解
  6. CentOS7服务器配置
  7. leetcode-mid-math-202. Happy Number-NO
  8. web开发中会话跟踪的方法有哪些
  9. ApplicationSettingsBase运用
  10. 分布式任务队列 Celery —— 应用基础