25、Vue-axios拦截器
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>行找的皮卡丘</title>
<style type="text/css">
.spinner {
width: 60px;
height: 60px;
background-color: #67CF22;
margin: 100px auto;
-webkit-animation: rotateplane 1.2s infinite ease-in-out;
animation: rotateplane 1.2s infinite ease-in-out;
}
@-webkit-keyframes rotateplane {
0% {
-webkit-transform: perspective(120px)
}
50% {
-webkit-transform: perspective(120px) rotateY(180deg)
}
100% {
-webkit-transform: perspective(120px) rotateY(180deg) rotateX(180deg)
}
}
@keyframes rotateplane {
0% {
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(0deg) rotateY(0deg)
}
50% {
transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg);
-webkit-transform: perspective(120px) rotateX(-180.1deg) rotateY(0deg)
}
100% {
transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
-webkit-transform: perspective(120px) rotateX(-180deg) rotateY(-179.9deg);
}
}
</style>
</head>
<body>
<div id="app">
</div>
</body>
<script type="text/javascript" src="js/vue.js"></script>
<script type="text/javascript" src="./node_modules/axios/dist/axios.js"></script>
<script type="text/javascript">
Vue.prototype.$axios = axios;
var App = {
data() {
return {
isShow: false
}
},
template: `
<div>
<button @click='senAjax'>发起请求</button>
<div class="spinner" v-show='isShow'></div>
</div>
`,
methods: {
senAjax() {
this.$axios.interceptors.request.use(function(config) {
var token = localStorage.getItem('token');
if (token) {
config.headers['token'] = token;
}
this.isShow = true
console.log(this.isShow)
return config;
}, function(error) {
return Promise.reject(error);
});
this.$axios.interceptors.response.use(function(response) {
console.log(response.data.token);
if (response.data.token) {
localStorage.setItem('token', response.data.token);
}
this.isShow = false
console.log(this.isShow)
return response;
}, function(error) {
return Promise.reject(error);
});
this.$axios.get('http://127.0.0.1:8888')
.then(res => {
console.log(res);
})
.catch(err => {
console.log(err)
})
}
}
};
new Vue({
el: '#app',
data() {
return {
}
},
template: `<App/>`,
components: {
App
}
});
</script>
</html>