Ajax获取首页数据–axios
- 项目安装axios 
 
分析:首页由5个组件组成,每一个组件都有自己的数据,那么每个组件都发送一个ajax请求。如果这样做首页就会发送5个ajax请求,网站的性能会很低。
解决:Home.vue组件中发送ajax是最好的选择,这个组件获取ajax请求的数据传给每个子组件中,只用请求一次。
- 引入axios
 
1
   | import axios from "axios";
 
  | 
 
- 使用
 
1 2 3 4 5 6 7 8 9 10
   |    methods: {     getHomeInfo() {       axios.get("/api/index.json").then(this.getHomeInfoSucc);     }   },      mounted() {     this.getHomeInfo();   }
 
  | 
 
这里我们的使用的是本地模拟的数据json文件,开发环境中使用转发机制
vue中提供了一个代理功能

index.json

首页父子组件数据传递
Home.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
   | <template>   <div>     <home-header :city="city"></home-header>     <home-swiper :list="swiperList"></home-swiper>     <home-icons :list="iconList"></home-icons>     <home-recommend :list="recommendList"></home-recommend>     <home-weekend :list="weekendList"></home-weekend>   </div> </template>
  <script> import HomeHeader from "./components/Header"; import HomeSwiper from "./components/Swiper"; import HomeIcons from "./components/Icons"; import HomeRecommend from "./components/Recommend"; import HomeWeekend from "./components/Weekend"; import axios from "axios"; export default {   name: "Home",   components: {     HomeHeader,     HomeSwiper,     HomeIcons,     HomeRecommend,     HomeWeekend   },   data() {     return {       city: "",       swiperList: [],       iconList: [],       recommendList: [],       weekendList: []     };   },   methods: {     getHomeInfo() {       axios.get("/api/index.json").then(this.getHomeInfoSucc);     },     getHomeInfoSucc(res) {       res = res.data;       if (res.ret && res.data) {         const data = res.data;         this.city = res.data.city;         this.swiperList = data.swiperList;         this.iconList = data.iconList;         this.recommendList = data.recommendList;         this.weekendList = data.weekendList;       }     }   },      mounted() {     this.getHomeInfo();   } }; </script>
  <style></style>
 
 
  | 
 
父组件给子组件传值
使用props,父组件可以使用props向子组件传递数据。
- Swiper.vue中小问题
 
默认显示的是最后一页的图片
分析:当页面还没接收数据的时候,也就是还没接收ajax获取的Array数组时,这时候接收的是外面获取的空数组。
解决
1
   | <swiper :options="swiperOptions" v-if="showSwiper">
 
  | 
 
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21
   | <script> export default {   name: "HomeSwiper",   props: {     list: Array   },   data() {     return {       swiperOptions: {         pagination: ".swiper-pagination",         loop: true        }     };   },   computed: {     showSwiper() {       return this.list.length;     }   } }; </script>
 
  |