ant-design-vue 快速避坑指南
1.Table对接后台返回数据
result.then(r => {
  this.localPagination = Object.assign({}, this.localPagination, {
    current: r.pageNo,  // 这里修改当前分页字段
    total: r.totalCount, // 这里修改总记录数字段
    showSizeChanger: this.showSizeChanger,
    pageSize: (pagination && pagination.pageSize) ||
      this.localPagination.pageSize // 这里修改总记录数当前页数字段
  })
    //r.data中的data修改为返回列表字段
  if (r.data.length == 0 && this.localPagination.current != 1) {
    this.localPagination.current--
    this.loadData()
    return
  }
  !r.totalCount && ['auto', false].includes(this.showPagination) && (this.localPagination = false)
  this.localDataSource = r.data // 返回结果中的数组数据
  this.localLoading = false
});
2.table操作栏参数问题
columns: [
...
{
title: '操作',
dataIndex: 'id,text',
key: 'id',
scopedSlots: { customRender: 'operation' }
}
】
3.table分页组件展示条数
:pagination="{showTotal: total => `共${total}条`}"
4.神奇的最后一个标签隐藏问题
<a-tag
v-for="(tag, index) in Tags"
:key="tag.id"
:closable="tagCloseable"
:afterClose="() => handleTagStatus(0,tag)"
>{{ tag.name }}
</a-tag>
this.Tags = this.Tags.filter(tag => tag.id !== removeTag.id)
5.表单的各种常规操作
this.form.validateFields(['name'], { force: true }) 
this.form.resetFields(`name`,'')
this.form.resetFields(`name`,'')
<a-upload :customRequest="upLoad"></a-upload>
upLoad (info) {
    let file = info.file;
    let param = new FormData(); //创建form对象
    param.append('file',file);//通过append向form对象添加数据
    console.log(param.get('file')); //FormData私有类对象访问不到,可以通过get判断值是否传进去
    let config = {
        headers:{'Content-Type':'multipart/form-data'}
    };
    this.$http.post(url, param, config).then(res => {
        ...
    })
},
6.接口跨域携带cookie问题
const service = axios.create({
    baseURL: `${process.env.VUE_APP_BASEURL}/backend`,
    withCredentials: true,
  timeout: 6000
})
 
router.beforeEach((to, from, next) => {
  // 对403无权限的处理
  if (to.path === '/403') {
    next()
  } else {
    if (roles) {//已登陆
      next()
    } else {
            //获取用户信息,GetUserInfo逻辑如下:
            //status=403 && reject(res),返回包含status;
            //status=1005 && reject(res.data)返回重定向的URL;
            //status=1000 && resolve()
      store
        .dispatch('GetUserInfo')
        .then(res => {
          next()
        })
        .catch((e) => {
          if (e.status) {
            next({ path: '/403' })
          } else {
                        //拼接URL跳去登陆页,登陆成功会重定向回当前页(login_redirect)
            const url = e.substring(0, e.lastIndexOf('redirect')) + 'redirect=' + login_redirect
            window.location.href = url
          }
        })
    }
  }
})
service.interceptors.response.use((response) => {
    if (response.data.status === 1005){
            //... 同上跳去登陆页
    }else{
        //为返回数据做统一处理
        return response.data
    }
}, err) 
7.引入eCharts
mounted() {
    window.addEventListener("resize", () => {
        this.chart.resize();
    });
},
import { debounce } from '@/utils'//防抖函数
export default {
  data() {
    return {
      $_sidebarElm: null
    }
  },
  mounted() {
    this.__resizeHandler = debounce(() => {
      if (this.chart) {
        this.chart.resize()
      }
    }, 100)
    window.addEventListener('resize', this.__resizeHandler)
    this.$_sidebarElm = document.getElementsByClassName('sidebar-container')[0]
    this.$_sidebarElm && this.$_sidebarElm.addEventListener('transitionend', this.$_sidebarResizeHandler)
  },
  beforeDestroy() {
    window.removeEventListener('resize', this.__resizeHandler)
    this.$_sidebarElm && this.$_sidebarElm.removeEventListener('transitionend', this.$_sidebarResizeHandler)
  },
  methods: {
    $_sidebarResizeHandler(e) {
      if (e.propertyName === 'width') {
        this.__resizeHandler()
      }
    }
  }
}
2)@/components/_utils/util.js中添加防抖函数
export const debounce = (func, wait, immediate) => {
  let timeout, args, context, timestamp, result
  const later = function() {
    // 据上一次触发时间间隔
    const last = +new Date() - timestamp
    // 上次被包装函数被调用时间间隔 last 小于设定时间间隔 wait
    if (last < wait && last > 0) {
      timeout = setTimeout(later, wait - last)
    } else {
      timeout = null
      // 如果设定为immediate===true,因为开始边界已经调用过了此处无需调用
      if (!immediate) {
        result = func.apply(context, args)
        if (!timeout) context = args = null
      }
    }
  }
  return function(...args) {
    context = this
    timestamp = +new Date()
    const callNow = immediate && !timeout
    // 如果延时不存在,重新设定延时
    if (!timeout) timeout = setTimeout(later, wait)
    if (callNow) {
      result = func.apply(context, args)
      context = args = null
    }
    return result
  }
}
3)resize监听方法混入图表组件即可
mixins: [resize]
ant-design-vue 快速避坑指南的更多相关文章
- CEF避坑指南(一)——下载并编译第一个示例
		CEF即Chromium Embedded Framework,Chrome浏览器嵌入式框架.它提供了接口供程序员们把Chrome放到自己的程序中.许多大型公司,如网易.腾讯都开始使用CEF进行前端开 ... 
- electron 编译 sqlite3避坑指南---尾部链接有已经编译成功的sqlite3
		electron 编译 sqlite3避坑指南(尾部链接有已经编译成功的sqlite3) sqlite很好用,不需要安装,使用electron开发桌面程序,sqlite自然是存储数据的不二之选,奈何编 ... 
- Ant Design Vue select下拉列表设置默认值
		在项目中需要为Ant Design Vue 的 select 组件设置一个默认值,如下图所示的状态下拉选择框,默认选择全部 代码如下: <a-select v-model="query ... 
- Ant Design Vue Pro 项目实战-项目初始化(一)
		写在前面 时间真快,转眼又是新的一年.随着前后端技术的不断更新迭代,尤其是前端,在目前前后端分离开发模式这样的一个大环境下,交互性.兼容性等传统的开发模式已经显得有些吃力.之前一直用的是react,随 ... 
- Canal v1.1.4版本避坑指南
		前提 在忍耐了很久之后,忍不住爆发了,在掘金发了条沸点(下班时发的): 这是一个令人悲伤的故事,这条情感爆发的沸点好像被屏蔽了,另外小水渠(Canal意为水道.管道)上线一段时间,不出坑的时候风平浪静 ... 
- Linux下Python3.6的安装及避坑指南
		Python3的安装 1.安装依赖环境 Python3在安装的过程中可能会用到各种依赖库,所以在正式安装Python3之前,需要将这些依赖库先行安装好. yum -y install zlib-dev ... 
- 基于Ant Design Vue封装一个表单控件
		开源代码 https://github.com/naturefwvue/nf-vue3-ant 有缺点本来是写在最后的,但是博文写的似乎有点太长了,估计大家没时间往下看,于是就把有缺点写在前面了,不喜 ... 
- Hive改表结构的两个坑|避坑指南
		Hive在大数据中可能是数据工程师使用的最多的组件,常见的数据仓库一般都是基于Hive搭建的,在使用Hive时候,遇到了两个奇怪的现象,今天给大家聊一下,以后遇到此类问题知道如何避坑! 坑一:改变字段 ... 
- Harmony OS 开发避坑指南——源码下载和编译
		Harmony OS 开发避坑指南--源码下载和编译 本文介绍了如何下载鸿蒙系统源码,如何一次性配置可以编译三个目标平台(Hi3516,Hi3518和Hi3861)的编译环境,以及如何将源码编译为三个 ... 
随机推荐
- 用集装箱装ASP。带有Docker和Azure Kubernetes服务的NET Core应用程序
			介绍 曾经有一个单一软件应用程序的时代,整个应用程序被打包并部署在作为单个进程运行的单个服务器上.我们都知道,在这个模型中,单点故障可能会导致整个应用程序崩溃. 微服务体系结构的发展是为了解决单片应用 ... 
- 【LGR-070】洛谷 3 月月赛-官方题解
			本次免费为大家提供[LGR-070]洛谷 3 月月赛的官方题解,点个赞再走呗! 代码就不上了,大家可以到别的博客上去找找!希望这篇博客能对你有所帮助! 
- 风车签名 - 让管理APP变成一件简单的事儿
			这是一款在Mac平台下安全可控的iOS签名管理软件,旨在对签名后的APP能够完全控制,包括APP的开启或禁用.设置到期时间锁.注入第三方动态库文件.设置安装限量.修改APP名称和自定义Bundle I ... 
- 2020已经过去五分之四了,你确定还不来了解一下JS的rAF?
			不会吧,不会吧,现在都2020年了不会还真人有人不知道JS的rAF吧??? rAF 简介 rAF是requestAnimationFrame的简称: 我们先从字面意思上理解requestAnimati ... 
- Warning: Permanently added the RSA host key for IP address '52.74.223.119' to the list of known hosts.
			如果出现这个问题,说明你的github缺少公钥 使用 ssh -T git@gtihub.com 去测试 1.生成密钥 ssh-keygen -t rsa -C "your name&quo ... 
- 基于python实现链式栈
			""" 链式栈 linkstack.py 思路分析: 1.源于链表结构 2.封装栈的操作方法(入栈,出栈,栈空,栈顶) 3.链表的开头作为栈顶(不用每次遍历,效率高,怎样 ... 
- Convert to Ones CodeForces(超水题)
			题目大意:给你几个数,这些数里面只有0或1,你有两种操作:1.把一段区域内的所有数前后交换位置.2.把一段区域内所有数取反.(区域可大可小,可以是所有数也 ... 
- kafka生产者 消费者
			publisher.php <?php $rk = new RdKafka\Producer(); $rk->addBrokers("192.168.33.50"); ... 
- php中,posix_getpid() 和 getmypid() 有什么不同
			getmypid:windows 和 linux都可以用posix_getpid:仅linux可以用 
- <audio> 标签
			<audio> 标签定义声音,比如音乐或其他音频流. 实例 一段简单的 HTML 5 音频: 
