axios拦截器(需要背诵)#
首先安装axios, npm i axios
- 对ajax请求进行拦截 
  
- 在请求头添加token
 
 - 对ajax响应数据进行拦截 
  
- 统一处理请求失败的情况, 这样就不需要在每个组件里处理失败的情况
 - 有些接口需要登录才能访问, 在没登录的情况下跳转到登录页面
 
 
/**
 * 配置axios的拦截器
 */  
let env = 'prod';  //dev开发, test测试, prod生产
let baseURL;
if(env === 'dev') {
    baseURL = 'http://localhost:3003';
} else if (env === 'test') {
    baseURL = 'http://test.huruqing.cn:3003';
} else {
    baseURL = 'http://huruqing.cn:3003';
} 
import axios from 'axios'; 
const service = axios.create({
    baseURL,
    timeout: 30000
}) 
// 配置请求拦截
service.interceptors.request.use((config) => { 
    console.log(config);
    // 添加token
    // config.headers["token"] = "gg12j3h4ghj2g134kj1g234gh12jh34k12h34g12kjh34kh1g";
      return config;
    },
    (error) => {
       alert('发送请求失败')
    }
); 
// 配置响应拦截
service.interceptors.response.use(
    (res) => {
       if (res.data.code == 666) {
        return res.data;
       } else {
            alert(res.data.msg);
       }
    },
    (error) => { 
      alert("网络异常,请稍后再试");
    }
);  
const get = (url,data) => {
    return service.get(url,{params:data});
} 
export default {
    ...service,
    get
};
 
(八) 父子组件通信(背诵)#
知识点(背诵):
- 父传子: 父组件通过(绑定)属性的方式传数据给子组件, 子组件使用props接收数据
 - 子传父: 父组件在子组件上绑定一个自定义事件, 子组件通过$emit触发该自定义事件, 同时可以传入数据
 
1.父传子#
- 父组件给子组件绑定属性, 属性的值是需要传递的信息
 - 子组件通过props接收父组件的信息
 
 // 例子1: 使用普通属性
// demo.vue
<template>
  <div>
    <h3>父组件</h3>
    <hr />
    <Son msg="hello world" username="张三"/>
  </div>
</template>
<script>
import Son from "./Son";
export default {
  components: {
    Son,
  },
};
</script> 
// Son.vue
<template>
  <div>
    <h4>子组件</h4>
    <p>msg: {{ msg }}</p>
    <p>username: {{ username }}</p>
  </div>
</template>
<script>
export default {
  props: ["msg", "username"],
};
</script> 
// 例子2: 使用绑定属性(可传变量)
// demo.vue
<template>
  <div>
    <h3>父组件</h3>
    <hr />
    <Son :msg="msg" :username="username" />
  </div>
</template>
<script>
import Son from "./Son";
export default {
  components: {
    Son,
  },
  data() {
    return {
        msg: '哈哈哈',
        username: '李四'
    };
  },
};
</script> 
// Son.vue
<template>
  <div>
    <h4>子组件</h4>
    <p>msg: {{ msg }}</p>
    <p>username: {{ username }}</p>
  </div>
</template>
<script>
export default {
  props: ["msg", "username"],
};
</script> 
 
父传子实践: 把首页拆分为多个组件 技巧: 如果某个部分只是做展示用, 尽量把它变成子组件
2. 子传父#
- 父组件在子组件上绑定一个自定义事件(事件名称我们自己定义的, vue本身是没有这个事件的)
 - 父组件给自定义事件绑定一个函数, 这个函数可以接受来自子组件的数据
 - 子组件使用$emit触发(调用)该事件, 并把数据以参数形式传给父组件
 
// 例子1: 一个简单的例子
// demo.vue
<template>
  <div>
    <h3>父组件</h3>
    <hr />
    <Son @aaa="say"/>
  </div>
</template>
<script>
import Son from "./Son";
export default {
  components: {
    Son,
  },
  data() {
    return { 
    };
  },
  methods: {
    say(data) {
      alert(data)
    }
  }
};
</script> 
// 子组件
<template>
  <div>
    <h4>子组件</h4>
    <button @click="$emit('aaa','我是子组件')">点击</button>
  </div>
</template>
<script>
export default {
  props: ["msg", "username"],
};
</script>  









