背景:做程序员的第三年。回想起自己经历的问题。踩过的坑。其实被记录下来的很少。可能是忙或者觉得问题太简单记录人家会觉得自己菜。总之没有养成常常分享和记录的习惯。和小伙伴一合计,决定建了一个微信群。用来互相监督和记录日常遇到的问题。大家相互鼓励。共同进步。所以成立了新生代表农民工们的微信群。这篇博客用来记录,群友们总结的思路和问题。便于日后查看。群里前端后端都有,只要你想学习想进步,想分享。想记录,都欢迎扫描二维码加我微信进群。
群主二维码
相关记录
React
日期:2021-09-01
简述人:Timor
简述标题:React-hook,浏览器
简述内容:
1)问题:使用dispatch发请求后页面一直死循环?
解决方法:发请求要写在useEffect里面。
useEffect(() => {
dispatch && dispatch({
type: 'test/Query',
payload: {},
callback: (data) => {
console.log(data);
}
})
}, [])
Angular
日期:2021-09-02
简述人:Timor
简述标题:Angular之组件传参
简述内容:
1)问题:父页面如何往组件页面传参?
解决方法:组件页面定义 @Input() data : any接收父页面的传参。
父页面调用组件页面用[data]传递参数。
<meeting-unaccepted [data]="meetingList"></meeting-unaccepted>
2)问题:组件页面如何往父页面传参?
解决方法:组件页面定义 @Output() test: EventEmitter<any> = new EventEmitter<any>();
方法利用方法传参给父页面。
父页面调用组件页面用 (test)="test($event)"来接受组件传递回来的参数。
<meeting-unaccepted [data]="meetingList" (test)="test($event)"></meeting-unaccepted>
3)问题:父页面如何获取组件页面全部实例?
解决方法:父页面定义 @ViewChild('meetingContent') meetingContent: MeetingUnacceptedComponent;
用来调取组件页面全部实例。
<meeting-unaccepted #meetingContent[data]="meetingList" (test)="test($event)"></meeting-unaccepted>
echarts
日期:2021-08-20
简述人:Timor
简述标题:ng echatrs图表
简述内容:
1):问题:ng echatrs图表Y轴数值过大,被遮挡。
解决方法:1:设置图表左边距离。grid属性: 2:提取万,Y轴上方标注单位/万。
2):问题:ng echarts图表提示框内容过长,需要修改样式。
解决方法:tooltip属性下的formatter属性里调整样式。
vue
日期:2021-08-24
简述人:华上进
简述标题:excel转pdf文件功能
简述内容:
3):问题:vue读取流文件pdf并预览,预览不显示。
解决方法: 通过 <el-dialog>弹出层 加上
<el-dialog title="pdf预览" :visible.sync="isPdfShowDialog" top="5px" width="95%" height="100%" >
<iframe :src="pdfUrl" frameborder="0" width="95%" :height="ifrheight + 'px'" ></iframe>
</el-dialog>
并用 document.documentElement.clientHeight 获取高度,这儿不能用百分比获取,不然会高度很低。
4):问题:vue控件化页面抽离实现,及父子页面传值。
解决方法 : 父页面 通过 :show.sync="isShowDialog" 属性,子页面通过 props进行值的接受
props: {
show: { type: Boolean, default: false }, // 弹框可见标志
},
watch: {
// 监听show,visible 随着show变化而变化
show: {
immediate: true,
handler(show) {
this.visible = show;
},
},
}
在data() 中定义 visible: this.show 即可。
日期:2021-08-26
简述人:华上进
简述标题:组件化实现select组件多出调用
简述内容:
1):问题:组件业务相同但是回调不同。
解决方法:在点击click设置弹出层显示,并且动态赋值 select 的回调函数的传入的参数,设置值到downloadType,然后组件点击点击确定后回调走downloadByType()函数,然后去调用不同的回调函数即可。
@click.native="isShowTemplateDialog = true ,downloadType = 'type1'"
<SelectSheetTemplate
:show.sync="isShowTemplateDialog "
:sheetNames.sync="sheetNames"
@subSuccess="downloadByType(downloadType)"
></SelectSheetTemplate>
// 选择组件的公用回调函数
downloadByType(type) {
console.log(type)
switch (type) {
case 'type1': this.download1()
break
case 'type2': this.download2()
break
}
}
日期:2021-09-10
简述人:华上进
简述标题:9月6号到9月10号开发遇到的一些问题
简述内容:
1):问题:项目中有个需求,前端excel 的xlsx文件格式得json字符传入后台,文件太大超出post默认请求最大限制2M,请求后台就报错。
解决方案:
#设定Httppost数据大小,解决post参数过大问题
server.tomcat.max-http-post-size=-1
设置成-1即可,-1表示不限制大小
2):问题:前端vue el-tree 树形 去掉选中的节点。
解决方案:
highlight-current 高亮属性 动态设置 true 显示 或者 false 不显示 。
额外的学习到了一点,属性前面加 : 冒号 是动态获取值(一个变量或者表达式),不加的(是对应的字符串字面量)。
:highlight-current= isHighlightCurrentShow
js
日期:2021-09-03
简述人:华上进
简述标题:
1、[] 和 {}的开发中遇的问题;
简述内容:
1):问题:在开发过程中遇到了前端一个很奇怪的问题,2次请求第一次请求,ajax请求是有参数的,第二次就没值了,就很奇怪,在这儿折腾了好久,最后发现 因为我这儿是一个父子页面的一个传值,父页面定义的是{},子页面定义的是[],两边没统一,最后统一就解决了。
解决方案:[] 和 {}的区别
解释:
[]数组 创建 var name= ['hsj','cwd666'] 调用 name.[1]
{}对象 创建 var info= {'name':'hsj','age':23} 调用:info.name 、info['Name']
html
日期:2021-09-09
简述人:Timor
简述标题:placeholder换行
问题内容:
1)问题:项目需要对默认值进行换行。在placeholder值中用换行符 <br/>和 /r/n 等都没有作用
解决方法:用HTML转义符。 --- 换行 。 ---回车
java
日期:2021-08-24
简述人:华上进
简述标题:excel转pdf文件功能
简述内容:
1):问题:因为业务员原因,前端excel以json的格式写入到后台,后台解析成excel文件,HttpServletResponse 输出流,我想转成输入流(直接进行操作,文件不存储到本地) 。
解决方法:1:因为对流的理解比较少,就停留在普通的使用上,所以换了一种解决方式,先将输出流的数据写入到了本地,然后通过file读到文件流,对xlsx流文件进行操作,转换成pdf文件(存储到项目static文件目录下,然后用完即删除,实现伪不存到本地)。
2):问题:aspose配置excel转pdf 列太宽也显示到一页纸,行数过多自动换页显示
解决方法:
PdfSaveOptions pdfSaveOptions = new PdfSaveOptions();
//把内容放在一张PDF 页面上,并且行数过多自动换行;
pdfSaveOptions.setAllColumnsInOnePagePerSheet(true);
日期:2021-09-03
简述人:华上进
简述标题:
1、mysql的json数据类型 ,数据持久层是mybatis-plus在java实体中要怎么定义,如何使用;
2、[] 和 {}的开发中遇的问题;
简述内容:
1):问题:之前没有使用过mysql 的json数据类型,导致不知如何下手
解决方案:
// 在实体创建字段定义类型 加上如下注解,用Object去接受即可
@TableField(typeHandler = FastjsonTypeHandler.class,value = "JSON_DATA")
private Object jsonData;
日期:2021-09-10
简述人:华上进
简述标题:9月6号到9月10号开发遇到的一些问题
简述内容:
1):问题:vue实现将json字符写入文件实现下载。
解决方案:
当然在引入工具之前的下载相关的依赖
// 引入工具类
import { saveAs } from 'file-saver'
const str = new Blob(['我是文本'], { type: 'text/plain;charset=utf-8' })
saveAs('文本格式.jcll')
2):问题:在java后台实现 JSONObject 对象 删除json中的值,json引用对象的修改,不修改最终的对象。
解决方案:
直接remove("对象即可");
可以将json转为json字符,然后用JSONObject 对象接收。
JSONObject jsonRemoObject = (JSONObject) JSONObject.parse(borderValueObject.toString());
jsonRemoObject.remove("row_index");
jsonRemoObject.remove("col_index");
4):问题:poi 报 XSSFCellStyle 对象创建过多,超出阈值,导致异常。
ps:这个问题最开始在网上查了很多资料,都是说把样式的创建提取到循环外面,但是都没有说,提到外面后导致的样式问题,可能他们都是样式固定的,我这边需要设置很多样式,也在群里问了很多,也没能解决,最后看到一篇博文说把 XSSFCellStyle对象存起来,相同的样式就用同一个XSSFCellStyle 对象即可,最后选择了使用map集合来做这样的一个操作代码如下,这样就解决了 XSSFCellStyle 对象创建最大次数超过阈值异常,**代码可以借鉴,可能不能拿来直接用,但是最重要的是这个思路**。
解决方案:
// 定义样式map存储 XSSFCellStyle 单元格样式 放在循环外面
Map<String, XSSFCellStyle> cellStyleMap = new HashMap<>();
for(int index = 0; index < size; index++){
CellStyle cellStyle = null;
// 每个单元格样式进行样式进行组装成一个字符串 然后拿到样式map离去比较,若存在则直接在map中拿样式对象,解决样式对象创建最大值报错
StringBuilder stringBdCompare = new StringBuilder();
// jsonObjectValue 是样式json对象
// 样式1 将样式进行拼接
if (Objects.equals(null, jsonObjectValue.get("样式1"))) {
stringBdCompare.append("样式1"=null,");
} else {
stringBdCompare.append("样式1"=" + jsonObjectValue.get("样式1").toString() + ",");
}
// 样式2 将样式进行拼接
if (Objects.equals(null, jsonObjectValue.get("样式2"))) {
stringBdCompare.append("样式2"=null,");
} else {
stringBdCompare.append("样式2=" + jsonObjectValue.get("样式2").toString() + ",");
}
// ......等等一些样式
// 判断该单元格样式是否存在map集合中 存在则直接将值付给了 cellStyle 对象
if (cellStyleMap.containsKey(stringBdCompare.toString())) {
cellStyle = cellStyleMap.get(stringBdCompare.toString());
} else {
// 这里继续走原来的创建 XSSFCellStyle 的相关逻辑
..........
.........
..........
// 相同格式的单元格的样式对象
cellStyleMap.put(stringBdCompare.toString(),cellStyle);
}
}
idea
日期:2021-08-25
简述人https:华上进
简述标题:idea运行SpringCloud项目,更新项目后部分实体找不到。
简述内容:
1):问题:拉取svn项目后,启动项目找不到同事上传的代码对应的实体类,项目未正常加载,删除了子项目的iml文件导致项目pom变灰化了一条删除线。百度很多方案无法创建iml,且子项目图标为灰色(其他图标为标记蓝色)。
解决方法:开始以为是idea版本问题,更换了最新版本也不行,最后猜测应该是iml,文件的影响,最后删除项目中的idea文件夹,然后重新打开项目。
浏览器
日期:2021-09-01
简述人:Timor
简述标题:React-hook,浏览器
简述内容:
2)问题:接口加密规则?
解决方法:项目中通常都会前后端约定一套加密规则放在headers.Authorization中。例如:随机数+SHA256+Base64+时间戳+GUID。
3)问题:什么是跨域?
解决方法:是浏览器对JavaScript实施的安全限制,要遵守同源策略。当请求url的协议,域名,端口三者之间任意一个和当前页面url不同即为跨域。常用反向代理解决跨域问题。
other
日期:2021-09-03
简述人:华上进
简述标题:
1):问题:nacos配置不太清楚没修改,导致了一个很奇怪的问题,也很搞笑。
前天晚上加班,突然我的系统登陆不了了,然后我问了另外一个同事,他说他的可以登陆,一看时间不早了嘛,就想着明天再看,果然第二天就好了,然后昨天晚上又碰到了,导致我无法开发,最后打断点调试发现redis连接不上,最后发现是我最开始配置nacos的时候redis的连接没改过来,每次连接的都是给我nacos配置同事的redis,他一下班电脑已关机redis一关,我就登陆不上系统了,关键我还一直以为这是一个隐藏的bug。
解决方案:
修改了nacos配置把redis地址改为了本地。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。