广告
广告
广告
经常漏删console真的很头疼,又不得不重新打包,所以希望有一款能在打包时自动删除console的插件。于是乎,就有了这篇文章。安装yarn add babel-plugin-transform-remove-console --dev安装完毕我们开始使用使用打开_babel.config.js_文件,输入以下代码,没有这个文件就手动创建。let plugins = []; if (process.env.NODE_ENV === 'production') { //正式环境自动删除console plugins.push('transform-r...
前端在api请求的时候,有时候可能会遇到发送多个请求的时候,但是实际有效的是最后一次,但是后端响应的值不一定是你最后一次发送的请求,有可能最后一次比之前的还要更快响应,这就导致用户切换到a数据,前端显示是b数据。解决这个情况有很多种方式,比如改动api请求方式,或者请求如果重复同一个接口,取消前面的请求,发起新的请求。这里我们是后者。使用方式官方提供了两个例子,第一个例子照着写怎么都没用,第二个没看懂他的参数到底是data的还是谁的,最终还是百度了好多文章,才渐渐明白。首先,我的项目使用的axios是二次封装的,也就是通过axios.create()方法预设了baseURL和拦截器的,最...
Element UI和iView 两个框架,他们表单验证使用的是async-validator,所他们的重置表单的方法是一样的。this.$refs[name].resetFields();使用该方法,会重置校验状态和表单值,表单的值会恢复成默认的值。那么,这个默认值的定义是什么?我今天就遇到了一个情况,就是我的表单绑定的对象,是一个空值,然后我在这个元素被创建时,拿到props传过来的值赋值给表单对象。当我再来改动表单内容后,进行表单重置时,发现,重置后表单显示的值居然是我从props中获取的那个。也就是说,重置表单,他并没有恢复我表单对象的空状态。所以我就在想,他的默认值是怎么判断的...
element的dialog弹窗,默认不是垂直居中的,只是水平居中,但是他有一个很好的地方,就是当窗口的高度小于dialog的高度时,他会有滚动条,并且可以完整的显示dialog,算是一个非常不错的兼容方式。但是当我们对dialog进行css调整为垂直居中时,往往会使用下面两种样式:绝对定位:.el-dialog__wrapper { position: relative; .el-dialog { position: absolute; top: 50%; left: 50%; transform: translate(-50%, -...
className方式我自己之前学es5的时候,老师教我们是用的是className属性,他是dom的一个属性,返回元素的class值,兼容性可以说是通杀吧,所有浏览器都是支持的,但是,他是一个string操作。document.getElementById('myid').className; 他会返回一个string的值(空的话返回empty string,empty string===“”,length为0),而class的设置,他是需要空格的:class="class1 class2",当我们添加一个新的class时就不得不考虑空格的问题:...
饿了么的侧边栏菜单,官方就是这样,当一个子菜单展开后,点击另一个无子菜单按钮,并不会收缩已展开的子菜单。然后被强迫修改,好嗨哟!效果图不废话,上教程!教程[hide]element给el-menu提供了一个手动关闭和打开菜单的方法,但是需要通过ref获取vue组件实例,通过该实例触发方法。但是首先我们要明白要处理的问题:点击无子菜单按钮折叠已展开菜单,那么如何判断哪个菜单是展开的,是我们首先要解决的问题。判断哪个菜单是展开的在for循环遍历出这个菜单时,其实是有区分有无子菜单的。所以我们可以直接给有子菜单的元素添加click事件<template> <el-menu...
通过api获取的数据,往往不一定是布尔值,在后端存放的数据中,大部分是都是0和1,但是饿了么的 Checkbox 多选框 组件,v-modal绑定的,虽然他文档上显示可以是string,number,但是实际上v-modal只能布尔值。他还有一个属性checked,checked可以使用三元判断<el-checkbox :checked="status===1"></el-checkbox>但是,他有一个致命的缺陷,如果数据源更新了数据,他不会动态变化,可能是因为我把他丢在的table组件里面的原因,如果想让他变化,只能手动点击,或者重新渲染。...
面包屑导航在网站的使用中是常常出现的,也是一个很常用的功能,最近在项目的需求里面,要求面包屑导航除了可以进行路由跳转,还在跳转时保留路由的参数,也就是说:路由a有参数1,a进入到b路由,再通过面包屑导航回到a,这个参数1要依旧存在才行。这就把我给弄蒙蔽了,这咋整?想了好久,只能这样做了:教程[hide]首先,面包屑导航必须要有规范要求,在这个规范内才能生成面包屑导航,正所谓无规矩不成方圆。路由必须存在name和title两个属性,才能生成面包屑面包屑有面包屑独有的属性配置,该配置权限高于普通属性基本上遵循这两点,我们可以配置一个路由了:export default [ { p...
本想着有木有人写好现成的组件,搜索了下,并没有,于是只能用better-scroll插件来做了。先看下效果图:教程具体的详细内容就不多说了,直接讲一下他的实现要求。最外围一个wrap容器,用于初始化的,他的宽度自己设置,然后overflow: hidden;必须设置,你也可以只设置x轴。wrap下面是一个宽度容器,content,他的宽度必须是他下面子元素宽度之和,比如有3个子元素,子元素的宽度是200,content就是3*200的宽度content容器下面就是具体的子元素了,尽量不用用margin做间隔,因为js获取margin不是很方便,可以多套个div元素,用padding来做分...
最近看群友搞了个灯笼效果,加上接近新年,所以我也来搞一个,在原来的基础上,我改用一个js文件搞定,省的总是粘贴html,css,太麻烦了。效果图文件说明源码文件夹里是源码,有修改需求可以改动这个文件es5里面是已经babel转换好的文件,其中有一个压缩和未压缩的,看自己需要引入任意一个文件即可。使用说明我们需要在的前面,添加这段代码<script id="denglong" type="text/javascript" src="https://cdn.jsdelivr.net/gh/mulingyuer/web-denglong/...
vue项目,如果要使用轮播,能做动画的只有vue-awesome-swiper了,除非牛人自己造轮子,但是vue-awesome-swiper是需要swiper的支持,而现在swiper已经出到6了,swiper的官网明确表示6只能支持vue3.0,而且官网没有旧版本的api文档,这就表示,目前主流的2.0项目,想用它真的就只能瞎子过河,摸不着边了。而且swiper的动画,是需要魔改代码的,因为动画的那个js文件需要改动,然后动画使用的animate.css也因为版本大改,导致使用起来越发的摸不着头脑,百度到的都是旧的教程,为此我特意研究了下,终于是“完美”使用了,为此出个教程。废话不多...
本来我是不怎么使用这个东西的,因为他报错实在是太烦了,但是当项目接手的人多了以后,代码可能会变得不稳定,每个人都有每个人的写法,也会有参差不齐的情况,有好有坏。有时候员工A创建了变量1,员工2修改后,变量1可能就不需要了,但是没有删除,因为代码不熟悉的缘故,往往会造成多余的代码出现,对后期维护非常不便,所以我想着能有一个基本的设定需求,在某些地方能有提供,甚至限制。所以我在初始化vue项目的时候选择的eslint的,初始化的时候有四个选项,我就选择的最后一项,也是试水。使用了eslint后遇到了几个问题:引入的第三方文件也被检测了,按道理那部分是不用检测处理的怎么配置规则这里就对应的说下...
经常遇到这种情况,不小心上传了某个文件,这个文件是不需要上传到远程仓库,很头疼。本地的又不想删除,想着直接删除远程,百度半天都没找到好用的,最后问了下群友,给了个教程链接,我研究了下,大概明白怎么回事。首先为了防止本地的再次被上传,需要配置本地白名单,白名单的话,以vue项目为例子,在项目根目录有一个.gitignore文件,没有就自己创建一个,然后里面直接填目录或者文件名就行了。/dist /xxx.js本地白名单之后,以后git上传都不会上传该文件。现在我们要处理远程仓库的文件首先我们需要删除git在缓存中的文件git rm --cached config.js //删除conf...
一开始被要求这个功能我是一脸蒙蔽的,因为写了这么多vue项目,没有哪个项目要求这么做,况且,作为一个无刷新的前端项目,突然来个刷新,让我有点措不及防。中午和同事吃饭的路由讨论了此事,他说了一个点,让我想到,说不定可以这么做,于是下午百度了一些文章,心里有了思路,顺着这个思路,成功搞定这个需求。思路相同的路由,是不允许重复跳转的,所以不会触发路由守卫,想通过路由守卫处理这条路走不通。有人说通过this.$router.go(0)可以实现页面刷新,我测试了下,确实是页面刷新了,但是我要的是路由页刷新,路由页可能是某个区域,而不是整个网页,所以该方案也行不通。最终只能选择v-if和router...
饿了么的input组件只是在v-modal绑定的时候有一个.number修饰符,使用这个修饰符确实可以只输入数字,但是输入的是整数,无法输入小数,而且字符串还是可以输入,还可以负数,很尴尬。如果只想让它输入数字,小数,甚至更复杂的判断,上面的方式是不行的。网上的处理方式<el-input-number v-model="num" oninput ="value=value.replace(/[^0-9.]/g,'')"></el-input> 大概就是给他添加一个老版本的事件,行内事件进行replace替...
属性的简写es6允许对属性进行简写,可以直接使用变量,变量名直接成为了属性名。var a = "hello"; var b = {a}; //等同于 var b = { a:a }属性里的方法也可以简写var a = { b(){...} } //等同于 var a = { b: function(){ ... } }在CommonJS模块输出变量时,也就是node模块导出时,这种简写就显得十分方便,我们直接导致一个对象,对象里面使用简写。var a = {}; var b = {}; module.exports = {a,b}而属性的赋...
扩展运算符console.log(...[1,2,3]); //1,2,3扩展运算符会将后面跟着的数组转换为参数序列,这种效果一般用于函数参数,数组操作里面。扩展运算符后面甚至可以接表达式,但是表达式一定要有数组抛出const arr = [...(x>0?[1]:[]),2];如果是一个空数组使用扩展运算符,则无任何效果const a = []; console.log([...a,1]); //[1]代替数组的apply方法首先要知道apply除了改变this的指向外,第二个参数是一个数组,apply会将这个数组转为序列参数。如:function test(x,y,z){ ...
最近有这么一个需求,就是后端api地址返回一个文件,这个文件是已经格式化好的,比如表格.xlsx,或者是其他文件zip这些。但是后端他加了鉴权,所以如果直接a链接访问这个接口,我们无法在头信息上添加token字段,于是这个请求被作为无效。然后我使用了axios的请求,结果返回的内容,转换为blob对象后,下载完文件就被破坏了,无法打开。这里我贴一下之前的代码。api().then(res=>{ let blob = new Blob([err]); let a = document.createElement("a"); a.href = URL.c...
修改协议最近发现axios的修改协议有个很方便的操作,就是通过create创建一个axios对象的时候,就可以直接设置上传协议了。const api = axios.create({ headers: { 'Content-Type': 'application/x-www-form-urlencoded', } }); 这样我们将协议改为了application/x-www-form-urlencoded这个协议可以上传formData对象,但是他不能上传文件,所以如果你要上传文件,需要改为这个协议:multipart/fo...
最近评论