这个作用 主要还是为了让代码更加的,清晰。 不要全部都放到  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. Spring——MyBatis整合

    一.xml配置版 1.导入依赖 <!--MyBatis和Spring的整合包 由MyBatis提供--> <dependency> <groupId>org.myb ...

  2. Linux之防火墙iptables

    一.检查iptables服务状态 1.首先检查iptables服务的状态 [root@bogon ~]# service iptables status iptables: Firewall is n ...

  3. C++:#include和using namespace

    https://blog.csdn.net/u013719339/article/details/80221899

  4. Nginx-rtmp之配置项的管理

    1. 概述 Nginx-rtmp 对 rtmp{...} 内的配置项划分了几个级别: 直接隶属于 rtmp{} 块内的配置项称为 main 配置项. 直接隶属于 server{} 块内的配置项称为 s ...

  5. MyBatis 整合 Druid

    pom.xml 依赖 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  6. [论文理解] Acquisition of Localization Confidence for Accurate Object Detection

    Acquisition of Localization Confidence for Accurate Object Detection Intro 目标检测领域的问题有很多,本文的作者捕捉到了这样一 ...

  7. 微信小程序之阻止冒泡事件

    众所周知,在微信小程序给标签绑定点击方法大家都会想到 "bindtap" 但是在页面中会遇到 点击 会冒泡而触发其他元素的时间发生 那么怎么办呢 就把引发冒泡事件的始作俑者的 bi ...

  8. 编译openwrt时报错build_dir/hostpkg/libubox-2018-07-25-c83a84af/blobmsg_json.c:21:19: fatal error: json.h: No such file or directory

    答: 一. 详细日志: build_dir/hostpkg/libubox-2018-07-25-c83a84af/blobmsg_json.c:21:19: fatal error: json.h: ...

  9. Vue -3:单文件组件

    在很多 Vue 项目中,我们使用 Vue.component 来定义全局组件,紧接着用 new Vue({ el: '#container '}) 在每个页面内指定一个容器元素. 这种方式在很多中小规 ...

  10. LC 966. Vowel Spellchecker

    Given a wordlist, we want to implement a spellchecker that converts a query word into a correct word ...