1. 路由死循环,堆栈溢出
- 原因:next() 表示路由成功,直接进入to路由,不会再次调用router.beforeEach()。next('/login') 表示路由拦截成功,重定向至login,会再次调用router.beforeEach()
2. 地图加载时页面卡顿严重
- 原因:代码阻塞,并非地图json文件过大
- 解决方案:
setTimeout(() => {
this.myChart.setOption(conf, true);
this.myChart.resize();
}, 30);
3. 性能优化,数据报表页面加载慢
- 原因:指标太多导致多次请求接口
- 解决方案:接口优化,传入指标集合即可,即一次接口请求返回所有数据
4. 免登的实现
enbrands登录时暗调用BI系统(相当于首次携参请求BI系统但不跳转到BI系统,以便确确认当前是否有用户登录)。登录进来后点击BI数据分析跳转BI系统,免登成功则进入列表页,免登失败则进入login页面。
- 问题:首次携参请求BI系统时没有触发暗操作
- 原因:php开发中,没有触发image的url,故没有检测到首次免登结果
- 方案:image换成iframe;增加个接口请求,请求的url即为BI系统的url
5. 时间格式转化
// 获取当前标准时间
let date = new Date();
// 标准时间转时间戳
let timeStamp = date.getTime();
// 标准时间转时间格式
let timeFormat = dayjs(date).format("YYYY-MM-DD");
// 获取当前时间戳
let currentTime = Date.now();
// 获取当前时间戳(具体到秒) 8.64e7 = 8.64*10的7次方
var currentTime = Date.now() - 8.64e7;
// 获取当前时间戳(具体到秒)
var currentTime = Date.now() - 24 * 60 * 60 * 1000;
6. vue重新渲染的几种方式
- 使用组件中的key,key变则重新渲染
- 使用
$forceUpdate(),不会更新任何计算属性,仅强制重新渲染视图(销毁并新建) - v-if ,结合
this.$nextTick实现刷新 - 重新加载整个页面
this.$set(this.form, "key", value)数据更改了但ui没渲染时使用
7. 数值千分位处理
// 数值千分位,保留小数
const thousandsFormat = (num: number, end: number): string => {
let splits = [];
let res: any = [];
splits = num.toFixed(end).toString().split(".");
splits[0]
.split("")
.reverse()
.map((item, i) => {
if (i % 3 == 0 && i != 0) {
res.push(",");
}
res.push(item);
});
return res.reverse().join("") + (splits.length > 1 ? `.${splits[1]}` : "");
};
// 数值千分位,整数
function integerFormat(num: number): string {
const c =
num.toString().indexOf(".") !== -1
? num.toLocaleString()
: num.toString().replace(/(\d)(?=(?:\d{3})+$)/g, "$1,");
return c;
}
8. 数组找最值
const arr = [1, 2, 3, 4, 5, 6, 7, 1];
// 1
var max = arr[0];
for (let i = 0; i < arr.length; i++) {
max = Math.max(max, arr[i]);
}
// 2.函数reduce
var max = arr.reduce(function (pre, next) {
return Math.max(pre, next);
});
// 3.排序sort
arr.sort(function (a, b) {
return a - b;
});
var max = arr[arr.length - 1];
// 4.es6中
var max = Math.max(...arr);
9. vue3中setup前面加上async后页面不显示
- 使用
<suspense>标签包裹当前组件 - 使用生命周期钩子,如下代码:
setup() {
onBeforeMount(async () => {
const result = await axios.get(".............");
});
}