vue实现axios和事件Bus等父子组件的事件传递实现

发送请求的配置

vue.config.js

javascript 复制代码
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({
  transpileDependencies: true,
  devServer: {
  proxy:{
    '/api':{
      target:'http://localhost:7001',
      changeOrigin:true,
      pathRewrite:{
        '^/api':'' //重写api,把api变成空字符,因为我们真正请求的路径是没有api的
      }
    }

  }

  }


})
javascript 复制代码
import axios from "axios";
const service = axios.create({
    timeout: 5000,
    baseURL:  'api',
    withCredentials:  true
});
// request interceptor
service.interceptors.request.use(
    config => {
     const token=   localStorage.getItem("token") 
      // do something before request is sent
      if (localStorage.getItem("token") == undefined) {
        // config.headers['Authorization'] = 'Basic ' + Base64.encode('ha_web:ha_web_secret')
      } else {
    
        // config.headers['Authorization'] = 'Basic ' + Base64.encode('ha_web:ha_web_secret')
        // config.headers['cloud-auth'] = 'bearer ' + token
        config.headers['token'] = token
      }
    //   config.headers['User-Type'] = 'pos'
      // if (store.getters.token) {
      //   // let each request carry token
      //   // ['X-Token'] is a custom headers key
      //   // please modify it according to the actual situation
      //   config.headers['X-Token'] = getToken()
      // }
      return config
    },
    error => {
      // do something with request error
  
      return Promise.reject(error)
    }
  )


  service.interceptors.response.use(
    /**
     * If you want to get http information such as headers or status
     * Please return  response => response
     */
  
    /**
     * Determine the request status by custom code
     * Here is just an example
     * You can also judge the status by HTTP Status Code
     */
    response => {
      const res = response.data
      // if the custom code is not 20000, it is judged as an error.
    //   if (res.code == 200 || res.code == 400) {
    //     return res
    //   } else {
    //     Message({
    //       message: res.msg || 'Error',
    //       type: 'error',
    //       duration: 5 * 1000
    //     })
  
    //     if (res.code === 401) {
    //       store.dispatch('user/resetToken').then(() => {
    //         location.reload()
    //       })
          
    //     }
    //     return Promise.reject(new Error(res.msg || 'Error'))
    //   }
      return res
    },
    error => {
    //   if (error.response.data.code == 401) {
    //     MessageBox.error('请求为授权,请重新登陆')
  
    //     store.dispatch('user/resetToken').then(() => {
    //       location.reload()
    //     })
    //   } else if (error.response.data.code == 400) {
      
    //     Message.error(error.response.data.msg)
    //   } else {
    
    //     Message.error('未知异常')
    //   }
  
   
      return Promise.reject(error)
    }
  )


export default service;

vue中bus的事件线传递接收

javascript 复制代码
        this.$eventBus.$on('show-login-dialog', () => {
            // 在这里编写弹出 el-dialog 的逻辑
            // 例.centerDialogVisible
            this.centerDialogVisible = true;
        })

路由守卫中,使用bus事件传递信息,弹出事件

javascript 复制代码
router.beforeEach((to,from,next)=>{
  //  if(localStorage.getItem('token')){
  //   next('/');


  //  }

  if(to.path ==='/login' || to.path ==='/'){
    next()
  }else{
    if(localStorage.getItem('token')){
      next()
    }else{
      // 跳转到   path: '/', name: 'home',
      next('/');
    //使用事件bus
    Vue.prototype.$eventBus.$emit('show-login-dialog')
      // next('/login')
    }
  }
})

父子组件之间的事件传递接收

javascript 复制代码
  setSearchParma() {
            this.$emit('transfer', this.searchParams.searchName) //触发transfer方法
        }

接收组件的信息

javascript 复制代码
  <AppHeader  @transfer="getSearchParam"></AppHeader>
相关推荐
还是鼠鼠5 分钟前
图书管理系统 Axios 源码__新增图书
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
customer0834 分钟前
【开源免费】基于SpringBoot+Vue.JS体育馆管理系统(JAVA毕业设计)
java·vue.js·spring boot·后端·开源
还是鼠鼠3 小时前
图书管理系统 Axios 源码 __删除图书功能
前端·javascript·vscode·ajax·前端框架·node.js·bootstrap
轻口味3 小时前
Vue.js `Suspense` 和异步组件加载
前端·javascript·vue.js
m0_zj5 小时前
8.[前端开发-CSS]Day08-图形-字体-字体图标-元素定位
前端·css
还是鼠鼠5 小时前
图书管理系统 Axios 源码__编辑图书
前端·javascript·vscode·ajax·前端框架
北极象5 小时前
vue3中el-input无法获得焦点的问题
前端·javascript·vue.js
百度网站快速收录5 小时前
网站快速收录:如何优化网站头部与底部信息?
前端·html·百度快速收录·网站快速收录
Loong_DQX6 小时前
【react+redux】 react使用redux相关内容
前端·react.js·前端框架
GISer_Jing6 小时前
react redux监测值的变化
前端·javascript·react.js