课程名称:Vue + EChart 4.0 从0到1打造商业级数据报表项目
课程章节:4-9 http请求公共方法封装provide+inject传输数据
课程讲师: Sam
课程内容:
为了方便项目的统一请求,这里封装了下http的公共请求方法
首先安装axios
// npm i axios -S
// request.js中封装
import axios from 'axios'
const service = axios.create({
baseURL: 'https://apis.imooc.com',
timeout: 5000
})
service.interceptors.response.use( // 拦截器
response => { // 请求成功的处理
if (response.status === 200 && response.data) {
console.log(response.data)
return response.data
} else {
return Promise.reject(new Error('请求失败'))
}
},
error => { // 请求失败的处理
return Promise.reject(error)
}
)
export default service
// index.js
import request from '../utils/request'
const icode = '13926EAFCAA16CC3' // 防盗链的添加的icon
export function wordcloud() {
return request({
url: '/screen/wordcloud',
method: 'get',
params: { icode }
})
}
export function mapScatter() {
return request({
url: '/screen/map/scatter',
method: 'get',
params: { icode }
})
}
export function screenData() {
return request({
url: '/screen/data',
method: 'get',
params: { icode }
})
}
在home组件使用请求
import { wordcloud, screenData, mapScatter } from '../api'
export default{
data() {
return {
reportData: null,
wordCloud: null,
mapData: null
}
},
mounted() {
screenData().then(data => { this.reportData = data })
wordcloud().then(data => { this.wordCloud = data })
mapScatter().then(data => { this.mapData = data })
}
}
使用provide+inject实现组件通信
// 父组件定义数据参数
export default{
methods: {
getReportData() { // 解决mounted中数据被挂载了,然后inject创建的时期是beforeCreate与created的之间的问题
return this.reportData
},
getWordCloud() {
return this.wordCloud
},
getMapData() {
return this.mapData
}
},
provide() {
return {
getReportData: this.getReportData,
getWordCloud: this.getWordCloud,
getMapData: this.getMapData
}
}
}
// 子组件
// 例如TotalSales中接收使用
export default {
inject:['getReportData'],
computed:{
data(){
return this.getReportData()
}
}
}
封装数据请求commonDataMixin.vue
export default {
computed:{
reportData(){
return this.getReportData()
}
},
inject:['getReportData'],
}
// 在组建中使用
import commonDataMixin from '../../mixins/commonDataMixin'
export default {
mixins: [commonDataMixin],
}
课程收获:
这节课学校了使用axios进行数据的封装,可以用到数据请求的地方,进行引用就好,不用在进行重复的代码编写,并且学习到了axios中的get请求在params中传值,post在data中传值,两个可以在一起实现,再有就是进行数据的拦截,对错误进行统一的处理,还有学习到了使用provide与inject进行数据的传值,先在父组件中使用provide进行定义要传到组件的数据,在在inject中进行接收,传值的名称一定要一直,还有学习到了在vue2中周期穿透的技巧,现在methods中定义好数据,再在provie中应用赋值,这样就可以实现子组件的数据传输不一致了,还有学到了在minxins中封装统一的请求,做到请求的分离
点击查看更多内容
1人点赞
评论
共同学习,写下你的评论
评论加载中...
作者其他优质文章
正在加载中
感谢您的支持,我会继续努力的~
扫码打赏,你说多少就多少
赞赏金额会直接到老师账户
支付方式
打开微信扫一扫,即可进行扫码打赏哦