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>
相关推荐
进取星辰41 分钟前
25、Tailwind:魔法速记术——React 19 样式新思路
前端·react.js·前端框架
struggle20251 小时前
continue通过我们的开源 IDE 扩展和模型、规则、提示、文档和其他构建块中心,创建、共享和使用自定义 AI 代码助手
javascript·ide·python·typescript·开源
x-cmd1 小时前
[250512] Node.js 24 发布:ClangCL 构建,升级 V8 引擎、集成 npm 11
前端·javascript·windows·npm·node.js
夏之小星星2 小时前
el-tree结合checkbox实现数据回显
前端·javascript·vue.js
crazyme_62 小时前
前端自学入门:HTML 基础详解与学习路线指引
前端·学习·html
撸猫7912 小时前
HttpSession 的运行原理
前端·后端·cookie·httpsession
亦世凡华、2 小时前
Rollup入门与进阶:为现代Web应用构建超小的打包文件
前端·经验分享·rollup·配置项目·前端分享
琉璃℡初雪3 小时前
vue2/3 中使用 @vue-office/docx 在网页中预览(docx、excel、pdf)文件
vue.js·pdf·excel
Bl_a_ck3 小时前
【React】Craco 简介
开发语言·前端·react.js·typescript·前端框架
为美好的生活献上中指3 小时前
java每日精进 5.11【WebSocket】
java·javascript·css·网络·sql·websocket·网络协议