Vue的封装

 
封装的意义
提到代码的可读性
提⾼代码的可维护性
减少代码的书写
封装
// src/api/http.js
import axios from 'axios'
axios . defaults . baseURL = "http://127.0.0.1:8000/"
// axios.defaults.baseURL = "http://172.16.240.175/:8000/"
// 全局设置⽹络超时
axios . defaults . timeout = 10000 ;
// 设置请求头信息
axios . defaults . headers . post [ 'Content-Type' ] = 'application/json' ;
axios . defaults . headers . put [ 'Content-Type' ] = 'application/json' ;
axios . interceptors . request . use (
config => {
// 每次发送请求之前判断是否存在 token ,如果存在,则统⼀在 http 请求的 header 都加上
token ,不⽤每次请求都⼿动添加了
const token = localStorage . getItem ( "token" )
// console.log(token)
if ( token ) {
config . headers . Authorization = 'JWT ' + token
}
return config ;
},
error => {
return Promise . error ( error );
})
axios . interceptors . response . use (
// 请求成功 // res => res.status === 200 ? Promise.resolve(res) :
Promise.reject(res),
res => {
if ( res ){
// 加上 201 的原因是因为: modelviewset post 请求添加成功后返回的状态码是 201
if ( res . status === 200 || res . status === 201 ){
return Promise . resolve ( res );
}
 
 
}
},
// 请求失败
error => {
if ( error . response ) {
// 判断⼀下返回结果的 status == 401 ==401 跳转登录⻚⾯。 =401passs
// console.log(error.response)
if ( error . response . status === 401 ) {
// 跳转不可以使⽤ this.$router.push ⽅法、
// this.$router.push({path:'/login'})
window . location . href = "http://127.0.0.1:8888/"
} else {
// errorHandle(response.status, response.data.message);
return Promise . reject ( error . response );
}
// 请求已发出,但是不在 2xx 的范围
} else {
// 处理断⽹的情况
// eg: 请求超时或断⽹时,更新 state network 状态
// network 状态在 app.vue 中控制着⼀个全局的断⽹提示组件的显示隐藏
// 关于断⽹组件中的刷新重新获取数据,会在断⽹组件中说明
// store.commit('changeNetwork', false);
return Promise . reject ( error . response );
}
});
// 封装 xiaos 请求
// 封装 get 请求
export function axios_get ( url , params ) {
return new Promise (
( resolve , reject ) => {
axios . get ( url , { params : params })
. then ( res => {
// console.log(" 封装信息的的 res", res)
resolve ( res . data ) }). catch ( err => {
reject ( err . data )
})
}
)
}
// 封装 post 请求
export function axios_post ( url , data ) {
return new Promise (
( resolve , reject ) => {
// console.log(data)
axios . post ( url , JSON . stringify ( data ))
. then ( res => {
// console.log(" 封装信息的的 res", res)
resolve ( res . data )
}). catch ( err => {
reject ( err . data )
})
}
)
}
// 封装 put 请求
export function axios_put ( url , data ) {
return new Promise (
( resolve , reject ) => {
// console.log(data)
axios . put ( url , JSON . stringify ( data ))
. then ( res => {
// console.log(" 封装信息的的 res", res)
resolve ( res . data )
}). catch ( err => {
reject ( err . data )
})
}
)
}
// 封装 delete 请求
export function axios_delete ( url , data ) {
return new Promise (
( resolve , reject ) => {
// console.log(data)
axios . delete ( url , { params : data })
. then ( res => {
// console.log(" 封装信息的的 res", res)
resolve ( res . data )
}). catch ( err => { 使⽤
reject ( err . data )
})
}
)
}
export default axios ; // ⼀定要导出函数
浏览器的同源策略 :⾮同源的⻚⾯之间,⽆法获取数据
同源⼀般只⼀下三个东⻄相同:
协议相同
域名相同
端⼝相同
同源策略的⽬的: 是为了保证⽤户信息的安全,防⽌恶意的⽹站窃取数据。
同源策略的解决办法
jsonp
CORS
代理解决跨域
⽗⼦组件的调⽤:
Import 导⼊⼦组件
compants 注册⼦组件
注册的⼦组件当做标签来使⽤
⼦组件给⽗组件传参:
⽗组件⾥的⼦标签⾥写上要传递的数据 (:⼦组件的参数名字 = ⽗组件的参数名字)
在⼦组件⾥注册参数( pros
使⽤⽗组件传过来的参数
⽗组件给⼦组件传参:
⼦组件⾥先⽤特定的⽅法来把数据传递给⽗组件( this.$emit(" ⽅法的名字 " ,要传递的数据 )
<template>
    <div>
<h1>子组件 </h1>
<button @click="btn">向父组件传值</button>
    </div>
</template>

<script>
import father from './father'
import axios from 'axios'
export default {
   
    data() {
        return {
lis:'小鬼'
        }
    },
    methods: {
btn:function(){
    this.$emit('event1',this.lis)
}
    },
    created() {

    }
}
</script>

<style scoped>

</style>

 

⽗组件的⼦标签⾥来接收数据( @ ⼦组件的⽅法 = ⽗组件的⽅法)
 
 
methods ⾥接收传过来的 val 并赋值。
<template>
    <div>
{{lis1}} <br>
{{lis2}}
<son @event1='change($event)' ></son>
    </div>
</template>

<script>
import son from './son'
import axios from 'axios'
export default {
components:{
'son':son
},
    data() {
        return {
lis1:"我是你老子",
lis2:''
        }
    },
    methods: {
change(data){
    this.lis2=data
}
    },
    created() {

    }
}
</script>

<style scoped>

</style>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值