前端代码简洁封装(个人向)

这篇博客介绍了Vue中父子组件的数据传递与方法调用,包括`.sync`修饰符的使用和计算属性的设定。同时讲解了全局API和配置的注册,以及错误处理和响应拦截器的实现。此外,还展示了动态注册组件和数据结构处理的方法。
摘要由CSDN通过智能技术生成

父传子定义

//父组件使用.syc
<component :is-show.sync="item.showName" :is="item.name" :key="item.name" />
//子组件接收并使用计算属性
 props: {
    isShow: {
      type: Boolean,
      default: false,
    },
  },
  computed: {
    isShowReport: {
      get() {
        return this.isShow;
      },
      set(val) {
        this.$emit("update:isShow", val);
      },
    },
  },
  //可直接反向赋值

父子方法调用

//子组件使用$parent来调用
 this.$parent.init()
 //父组件使用ref
 this.$ref.(方法名)

main.js

//快速调用
import api from '@/api'
import config from '@/config';
// 注册全局api
Vue.prototype.$api = api
// 注册全局config
Vue.prototype.$config = config;

结构对象

//不易报错
const {success , data: { contents = {}, count = '' },} = res.data || {};
//或使用
data?.data?.count

响应拦截处理

  instance.interceptors.response.use(res => {
      const { data, status } = res
      if (Object.prototype.toString.call(data) === '[object Object]' && data.hasOwnProperty('success') && !data.success) {
        if (!data.message) {
          return Promise.reject(data)
        }
        if (data.code === "500") {
          Notice.error({
            title: ,
            desc: ''
          })
        }
        if (data.code === "110003"){
          // 超时状态码 重定向到login
            Vm.$router.push({
              name: "login"
            });
            return Promise.reject(data)
        }
        Notice.error({
          title: Error,
          desc: data.message
        });
        return Promise.reject(data)
      }
      return { data, status }
    }, error => {
      let errorInfo = error.response;
      switch (errorInfo && errorInfo.status) {
        case 401:
          Vm.$router.push({
            name: "login"
          })
          break
        case 403:
          Notice.error({
            title: ,
            desc: ''
          });
          break
        case 404:
          break
        case 500:
          Notice.error({
            title: ,
            desc: ''
          });
        case 502:
          Notice.error({
            title: ,
            desc: ''
          });
      }
      return Promise.reject(error)
    })
  }

注册组件

//尽量使用数据来注册
	<template v-for="item in quickMenu">
      <component :is-show.sync="item.showName" :is="item.name" :key="item.name" @click="item.action()" />
    </template>

quickMenu: [
			{
				menuName: 'my_favorite',
				isShowMenu: true,
				jumpRoute: '/myFavorite/my_favorite',
				action: () => this.$router.push('myFavorite/my_favorite')
			},
			{
				menuName: 'submit_feedback',
				isShowMenu: true,
				action: () => this.isShow = true
			}
		]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值