axios 的安装和导入 默认情况下,我们的项目中并没有对 axios 包的支持,所以需要下载安装。
在项目根目录中使用 npm 安装 axios 包(npm 的换源操作可以参考 Vue 自动化工具(VueCLI)脚手架 ):
安装好之后,在项目文件夹下的 node_module 文件夹中,就可以找到 axios 的安装包了。
接着在 main.js
文件中,导入 axios 并把 axios 对象挂载到 vue 属性中多为一个子对象,这样我们才能在组件中使用。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 import Vue from 'vue' import App from './App' import axios from 'axios' Vue.config.productionTip = false ; Vue.prototype.$axios = axios; new Vue({ el : '#app' , components : { App }, template : '<App/>' });
使用的时候,因为本质上来说,我们还是原来的 ajax,所以也会收到同源策略的影响。
在组件中使用 axios 的基本用法为:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 <script > export default { ... methods :{ get_data :function ( ) { this .$axios.get("http://wthrcdn.etouch.cn/weather_mini?city=深圳" ).then((response )=> { console .log(response); }).catch(error => { console .log(error); }) } } } </script >
完整版使用 axios 获取天气的 Vue 单文件组件代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 <template > <div > <input type ="text" v-model ="city" > <button @click ="get_weather" > 查看天气</button > <table > <thead > <tr > <th > 日期</th > <th > 最高气温</th > <th > 最低气温</th > <th > 风力</th > <th > 风向</th > <th > 天气</th > </tr > </thead > <tbody > <tr v-for ="(weather,key) in weather_list" :key ="key" > <td > {{ weather.date }}</td > <td > {{ weather.high|get_temperature }}</td > <td > {{ weather.low|get_temperature }}</td > <td > {{ weather.fengli|get_fengli }}</td > <td > {{ weather.fengxiang }}</td > <td > {{ weather.type }}</td > </tr > </tbody > </table > </div > </template > <script > export default { name : "get_weather" , data () { return { city : '' , weather_list : [], } }, methods : { get_weather ( ) { this .$axios.get('http://wthrcdn.etouch.cn/weather_mini' ,{ params : { city : this .city } }).then((response ) => { this .weather_list = response.data.data.forecast; }).catch((error ) => { console .log(error) }) }, }, filters : { get_fengli (fengli ) { let fengli_list = fengli.split('' ); fengli_list.splice(0 , 9 ); fengli_list.pop(); fengli_list.pop(); fengli_list.pop(); return fengli_list.join('' ) }, get_temperature (temperature ) { let tem_list = temperature.split('' ); tem_list.splice(0 , 3 ); return tem_list.join('' ) } } } </script > <style scoped > table { margin-top : 30px ; } th , td { text-align : center; margin : 0 ; width : 120px ; height : 30px ; } table , th , td { padding : 0 ; border : 1px solid #000 ; border-collapse : collapse; } </style >
代码的运行效果为: