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>
相关推荐
BigYe程普11 分钟前
我开发了一个出海全栈SaaS工具,还写了一套全栈开发教程
开发语言·前端·chrome·chatgpt·reactjs·个人开发
神之王楠24 分钟前
如何通过js加载css和html
javascript·css·html
余生H29 分钟前
前端的全栈混合之路Meteor篇:关于前后端分离及与各框架的对比
前端·javascript·node.js·全栈
花花鱼29 分钟前
@antv/x6 导出图片下载,或者导出图片为base64由后端去处理。
vue.js
程序员-珍31 分钟前
使用openapi生成前端请求文件报错 ‘Token “Integer“ does not exist.‘
java·前端·spring boot·后端·restful·个人开发
axihaihai36 分钟前
网站开发的发展(后端路由/前后端分离/前端路由)
前端
流烟默1 小时前
Vue中watch监听属性的一些应用总结
前端·javascript·vue.js·watch
2401_857297911 小时前
招联金融2025校招内推
java·前端·算法·金融·求职招聘
茶卡盐佑星_1 小时前
meta标签作用/SEO优化
前端·javascript·html
与衫1 小时前
掌握嵌套子查询:复杂 SQL 中 * 列的准确表列关系
android·javascript·sql