10-vue-axios异步实现数据获取
axios是什么
axios是"一个基于promise的 发送http请求的"一个工具库,可以用在浏览器和node.js中。
特点
axios是一个“异步请求”技术
支持Promise API
拦截请求和响应。拦截请求,可以过滤请求参数;拦截响应,可以处理响应异常
取消请求。请求可以手动取消
异步请求
基于 XMLHttpRequest对象 发起的请求 都是异步请求。
异步请求的特点
请求之后页面不动(不刷新),响应回来 更新的是 页面的局部,多个请求之间互不影响,并行执行。
ajax是用来发送异步请求的。
axios是ajax封装的库,用于异步请求接口数据,和vue没什么关联,但是多用于Vue全家桶中。
在vue项目中需要用到axios进行接口请求,并将 返回的内容 传递到 vue的data数据中心 中。
vue框架,使用axios
axios中文文档
http://www.axios-js.com/zh-cn/docs/
axios是干什么的
axios:前端通信框架,因为vue的边界很明确,就是为了处理DOM,所以并不具备通信功能,此时就需要额外使用一个通信框架与服务器交互;当然也可以使用jQuery提供的AJAX通信功能。
一、axios的基本使用
安装和引入
npm install 模块名称(依赖包) --save
npm install axios --save //项目中安装
npm i axios --save
或
cnpm install axios --save
引入axios的相关依赖
<script src="js/axios.js"></script>
或使用cdn使用
<script src="https://unpkg.com/axios/dist/axios.min.js"></script>
例如:
搭建 网易云音乐nodejs项目
NeteaseCloudMusicApi-master ----源码
搭建步骤:
(1)下载并初始化依赖包
npm install
(2)运行
node app.js
一.axios.get()方式请求 在vue中读取远程接口数据 的方法 -----------------------------------
例如1:访问网易云音乐接口地址
接口地址:获取banner的接口地址 /banner
<script src="./js/vue.js"></script> <script src="./js/axios.js"></script> </head> <body> <div id="app"> <button @click="getBanner">点击发送异步请求</button> <ul> <li v-for="(item,index) in banners"> <img v-bind:src="item"> </li> </ul> </div> <script> var vm = new Vue({ el: '#app', data: { banners:[] }, methods: { getBanner:function(){ // 接口地址 let apiUrl = 'http://localhost:3000/banner'; axios.get(apiUrl).then((response)=>{ console.log(response); if(response.status === 200){ let list = response.data.banners; // console.log(list); // 对list进行遍历,在遍历的过程当中,将它里面的每一项数据上的imageUrl这个信息,放置到数据中的banners里面去! list.forEach((item)=>{ console.log(item.imageUrl); this.banners.push(item.imageUrl) }) console.log(this.banners); }else{ console.log('无数据'); } }).catch((error)=>{ console.log(error); }) } }, components: { } }); </script>
预览效果,如下所示:
例如2:axios获取天气API数据
获取天气接口地址:http://wthrcdn.etouch.cn/weather_mini?city=
<!-- 引入核心css文件 --> <link rel="stylesheet" href="./bootstrap/css/bootstrap.min.css"> <!-- 引入核心js文件 --> <script src="./bootstrap/js/jquery-3.3.1.min.js"></script> <script src="./bootstrap/js/bootstrap.min.js"></script> <script src="./js/vue.js"></script> <script src="./js/axios.js"></script> </head> <body> <div id="app"> <div class="container"> <h3 class="text-center">axios获取天气API数据</h3> <div class="container"> <input v-model="city" class="form-control" style="width:400px;float:left;margin-right:10px;" type="text" name="" id="" placeholder="北京"> <button type="button" class="btn btn-primary" @click="getInfo">查询</button> </div> <h3 class="text-center" v-if="center!=''"> {{center}}----{{ganmao}} </h3> <table class="table table-hover"> <thead> <tr> <th>星期</th> <th>最高气温</th> <th>最低气温</th> <th>风向</th> </tr> </thead> <tbody> <tr v-for="(item,index) in list"> <th scope="row">{{item.date}}</th> <td>{{item.high}}</td> <td>{{item.low}}</td> <td>{{item.fengxiang}}</td> </tr> </tbody> </table> </div> </div> <script> var vm = new Vue({ el: '#app', data: { city:'', center:'', ganmao:'', list:[] }, methods: { getInfo:function(){ // 接口地址:http://wthrcdn.etouch.cn/weather_mini?city= if(this.city==''){ this.city = '北京'; } let apiUrl = 'http://wthrcdn.etouch.cn/weather_mini?city='+this.city; // 发送请求 axios.get(apiUrl).then((response)=>{ console.log(response); // (1) this.ganmao = response.data.data.ganmao; // (2) 获取 响应数据中的forecast数组上的数据,把这个数据,赋值给 数据中心data里的list空数组中 this.list = response.data.data.forecast; // (3) 获取 响应数据中的city的值,赋值给 数据中心data里的center this.center = response.data.data.city; // (4) 所有的事情,操作完毕后,把 input文本框中的输入的文本,清空,方便你下次输入内容 this.city = ''; }).catch((error)=>{ console.log(error); }) } }, components: { } }); </script>
预览效果,如下所示:
2.在vue中读取本地Json文件的 方法 ----------------------------------------
例如1:
点击按钮,获取data中json文件中的数据
<script src="./js/vue.js"></script> <script src="./js/axios.js"></script> </head> <body> <div id="app"> <button @click="getCate">访问data中分类数据</button> <div class="nav"> <ul> <li v-for="(item,index) in cateList">{{item}}</li> </ul> </div> </div> <script> var vm = new Vue({ el: '#app', data: { cateList:[] }, methods: { getCate:function(){ let apiUrl = './data/Category.json'; axios.get(apiUrl).then((response)=>{ if(response.status==200){ this.cateList = response.data.data; }else{ console.log('无数据'); } }).catch((error)=>{ console.log(error); }) }, }, components: { } }); </script>
预览效果,如下所示:
例如2:
还没有留言,还不快点抢沙发?