这个作用 主要还是为了让代码更加的,清晰。 不要全部都放到  created(){}  这个方法下面。
把这些代码全部抽离出去。 这里就只是去调用方法。
1. src 目录下,新建文件夹---  restful 文件夹下面新建js文件: api.js

import Axios from 'axios' // 导入axios    下载npm install axios -S
Axios.defaults.baseURL = 'https://www.luffycity.com/api/v1/'; // 设置公共URL // 获取课程分类列表 Api
export const categoryList = ()=> {
return Axios.get('course_sub/category/list/') // 返回出去一个 Axios 实例对象
.then(res=> res.data)// 把接受到的数据也 返回出. 这里不要加 {} 。俺也不知道为啥,你加了。就拿不到结果
.catch(err=>{})// 这里不知道有啥用
}; // courses/?sub_category=0&ordering= 获取所有课程的api
export const allCourseList = (query_id)=> {
return Axios.get(`courses/?sub_category=${query_id}&ordering=`) // 使用 `` 并用 ${} 拼接字符串 .then(res=> res.data)
.catch(err=>{})
};

在这个里面去写去请求数据的逻辑,然后将 Axios 这个对象返回出去。

抛出 两个方法。其他任何组建,再用的时候直接调用就好了。

2.  在main.js 里面, 将这个写好的  api.js  里面所有的东西。挂载到Vue。 这样组件才可以调用。

import Vue from 'vue'
import App from './App'
import router from './router/index'
import ElementUI from 'element-ui' // element-ui 导入
import 'element-ui/lib/theme-chalk/index.css' // 导入element-ui的样式
import '../static/globle/globle.css' // 导入自己写的样式 import Axios from 'axios' // 导入axios 下载npm install axios -S
Vue.prototype.$axios = Axios; // 挂载 axios 这里不能使用 use 的挂载方式 import * as api from './restful/api.js' // 在这里引入写好的API
Vue.prototype.$http = api; // 然后就可以在各个组件中,使用 $http.xxx 去调用想用的api函数了 Vue.config.productionTip = false; // 这个没啥用
Vue.use(ElementUI); // 挂载 element-ui /* eslint-disable no-new */
new Vue({
el: '#app',
router, // 挂载路由
template: '<App/>',
components: { App },
});

这里给这个 导入的api 对象。挂载到 Vue时, 起了个别名  $http  . 就更清楚了。

3. 到免费课程的 Vue组件中 里面,使用里面的方法。

<script>
export default {
name: 'FreeCourse',
data() {
return {
categoryList: [],// 分类列表
currentIndex: 0,//分类列表默认选中(使用的v-bind绑定类, 根据当前的这个值判断 true or false 是否添加active类名。展现样式)
categoryId: 0,//为0 就代表。获取包含所有的课程的列表
}
}, methods: {
courseClick(index, id) {
this.currentIndex = index;//修改分类列表的样式
this.categoryId = id;
this.getAllCourseList();
}, // 获取分类列表
getCategoryList() {
// 返回一个Axios实例化对象. 所以可以使用 res 进行取值
this.$http.categoryList()
.then(res => {
if (!res.error_no) {
this.categoryList = res.data;
let category = { //往列表里添加一个字典. 这个渲染到前端添加一个全部的按钮。用于展示全部课程
id: 0,
category: 0,
name: '全部'
};
this.categoryList.unshift(category) // unshift 插入到数组的第一个位置上
}
})
.catch(err => {
console.log(err);
});
}, // 获取全部的课程列表
getAllCourseList() {
this.$http.allCourseList(this.categoryId)
.then(res => {
if (!res.error_no) {
this.courseDetail = res.data;
}
}).catch(err => {})
},
}, // 生命周期 在created方法发起ajax请求
created() {
this.getCategoryList(); // 调用外面写的方法。 这里就不会显得太臃肿了
this.getAllCourseList();
}
}; </script>

这里的数据 根据从后端请求到的,数据格式来。
要发起 ajax 请求, 肯定要在请求周期的  created() 钩子函数中。

两个方法,一个是用来获取,课程 分类列表的。 一个是用来获取课程列表的。 两个方法都写在 methods 里面。
从 methods 里面去调用 $http.xxx  获取数据。 并且更新到 data(){} 里面。
有于 数据驱动视图, 使用 v-for v-if 这种就可以, 刷新出不同的数据了。

axios模块封装和分类列表实现的更多相关文章

  1. axios模块封装

    1.新建文件夹 network 在文件新建 request.js request.js: import axios from 'axios' export function request (conf ...

  2. Vue + Element UI 实现权限管理系统(工具模块封装)

    封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情,但是axios没有进行封装复用,项目越来越大,会引起越来越多的代码冗余,让代码变得越来越难维护.所以我们在这里先对 axi ...

  3. Vue + Element UI 实现权限管理系统 前端篇(三):工具模块封装

    封装 axios 模块 封装背景 使用axios发起一个请求是比较简单的事情,但是axios没有进行封装复用,项目越来越大,会引起越来越多的代码冗余,让代码变得越来越难维护.所以我们在这里先对 axi ...

  4. vue中Axios的封装和API接口的管理

    前端小白的声明: 这篇文章为转载:主要是为了方便自己查阅学习.如果对原博主造成侵犯,我会立即删除. 转载地址:点击查看 如图,面对一团糟代码的你~~~真的想说,What F~U~C~K!!! 回归正题 ...

  5. 如何将自己写的verilog模块封装成IP核

    如何将自己写的verilog模块封装成IP核 (2014-11-21 14:53:29) 转载▼ 标签: 财经 分类: 我的东东 =======================第一篇========= ...

  6. 自动计算label字体的高度和图片拉伸处理(封装成分类分享)

    自动计算label字体的高度和图片拉伸处理 *:first-child { margin-top: 0 !important; } body > *:last-child { margin-bo ...

  7. Java 9 揭秘(9. 打破模块封装)

    Tips 做一个终身学习的人. 在此章节中,主要介绍以下内容: 什么是打破模块的封装 如何使用命令行选项将依赖项(添加需要)添加到模块 如何使用--add-exports命令行选项导出模块的未导出包, ...

  8. WordPress分类列表函数:wp_list_categories用法及参数详解举例

    http://www.511yj.com/wordpress-wp-categories.html 注意: 1. wp_list_categories() 和 list_cats() 以及 wp_li ...

  9. python + selenium 模块封装及参数化

    模块封装 示例代码: baidu.py from time import sleep from selenium import webdriver driver = webdriver.Chrome( ...

随机推荐

  1. 2018 焦作网络赛 K Transport Ship ( 二进制优化 01 背包 )

    题目链接 题意 : 给出若干个物品的数量和单个的重量.问你能不能刚好组成总重 S 分析 : 由于物品过多.想到二进制优化 其实这篇博客就是存个二进制优化的写法 关于二进制优化的详情.百度一下有更多资料 ...

  2. 十进制数转N进制c++实现

    编写一个算法,将一个非负的十进制整数N转换为另一个基数为B的B进制整数. #include <iostream> #include<string.h> using namesp ...

  3. Codeforces 1214 F G H 补题记录

    翻开以前打的 #583,水平不够场上只过了五题.最近来补一下题,来记录我sb的调试过程. 估计我这个水平现场也过不了,因为前面的题已经zz调了好久-- F:就是给你环上一些点,两两配对求距离最小值. ...

  4. 妙味课堂——JavaScript基础课程笔记

    集中时间把秒微课堂JS的基础课程看完,并且认真完成了课后练习.感觉在JS方面的技能算是入了个门了.课后练习的作业完成的代码我都汇总在了这里.至于视频课的学习笔记,则记录如下. 第01课JS入门基础_热 ...

  5. ansible模块文件操作

    Ansible常用模块文件操作 [root@tiandong etc]# ansible-doc -l   列出ansible所支持的模块 [root@tiandong ~]# ansible-doc ...

  6. 修改hive 默认fs为s3 遇到的坑

    问题: hive我修改了 默认的f <property> <name>fs.defaultFS</name> <value>hdfs://...:802 ...

  7. hadoop yarn日志分离

    根据hdfs的auditlog以及fsimage分析,yarn的日志文件占用了10%-20%的rpc请求以及文件量,这对namenode的性能有比较大的影响,特别是当集群规模越来越大,会影响生产业务. ...

  8. mysql统计前24小时数据没有补0

    SELECT t1. HOUR HOUR, COUNT(t2. HOUR) count FROM ( SELECT DATE_FORMAT( HOUR), '%y-%m-%d %H' ) HOUR F ...

  9. DL反向传播理解

    作者:寒小阳 时间:2015年12月. 出处:http://blog.csdn.net/han_xiaoyang/article/details/50321873 声明:版权所有,转载请联系作者并注明 ...

  10. Python全栈开发第5天作业

    作业一:1) 将用户信息数据库文件和组信息数据库文件纵向合并为一个文件/1.txt(覆盖) 2) 将用户信息数据库文件和用户密码数据库文件纵向合并为一个文件/2.txt(追加) 3) 将/1.txt. ...