平时开发中遇到的一些问题及解决方法(记录在juejin社区)
安装node js,输入命令,提示:’node’ 不是内部或外部命令,也不是可运行的程序 或批处理文件的解决方法
大概率问题是环境变量未配置的问题
- 控制面板>系统>高级系统设置>高级>环境变量
 - 新建用户环境变量
 NODE_PATH(变量名),值就是nodejs安装路径(C:\Program Files\nodejs)默认安装路径- 编辑用户变量
 Path把nodejs路径直接添加在后面即可
Vue报错Uncaught TypeError: Cannot read property ‘match’ of undefined
vue页面后退控制台报错
是因为a标签没有设置href属性,加上href属性就好了
vue-awesome-swiper 使用loop:true后点击事件不生效的问题
1  | <template>  | 
会发现
loop出来的点击事件不生效
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 //解决
data() {
let vm=this;
return {
swiperOption: {
slidesPerView: 1,
spaceBetween: 30,
loop: true,
pagination: {
el: '.swiper-pagination',
clickable: true
},
navigation: {
nextEl: '.swiper-button-next',
prevEl: '.swiper-button-prev'
},
on:function(e){
vm.next(e)//获取所需要的参数
}
}
}
}
js动态往body添加dom
1  | let elem = document.createElement("div");  | 
监听页面关闭或刷新执行
原理1
2
3
4
5
6
7
8
9
10
11
12window.onbeforeunload = function (e) {
      e = e || window.event;
      // 兼容IE8和Firefox 4之前的版本
      if (e) {
        //     e.returnValue = '关闭提示';
      }
      // Chrome, Safari, Firefox 4+, Opera 12+ , IE 9+
      //   return '关闭提示';
      localStorage.removeItem("ax");
    };
在vue中使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17created(){
  window.addEventListener('beforeunload', this.leaveConfirm)
},
methods: {
  leaveConfirm (e) {
    e = e || window.event
    if (e) {
      // e.returnValue = '关闭提示'
    }
    // return '关闭提示'
    // 执行一些操作
    localStorage.removeItem('xx')
  },
},
destroyed () {
  window.removeEventListener('beforeunload', this.leaveConfirm);
},
Vue无痕刷新
1  | //App.vue  | 
还有两种方法(体验一般)
- 这两种都可以刷新当前页面的,缺点就是相当于按
 ctrl+F5强制刷新那种,整个页面重新加载,会出现一个瞬间的空白页面,体验不好
 1
2 location.reload()
this.$router.go(0)
- 先跳转一个空白页,再跳转回来,这种方法就是地址栏url会有瞬间变化
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15<template>
<div></div>
</template>
<script>
export default {
mounted() {
let redirect = this.$route.query.redirect;
this.$router.replace(redirect);
},
};
</script>
<style lang="less" scoped>
</style> 
ElementUI DatePicker选择月当前月份高亮样式修改
1  | <template>  | 
Css实现滚动时隐藏滚动条
1  | html {  | 
Vue install 使用
1  | const plugin = {  | 
在main.js中引入1
2import copy from './assets/js/plugin' //plugin.js根据项目中的位置自己定
Vue.use(copy,{name:'shadow'}) //使用与传参
jsonp判断url是否能打开
1  | $.ajax({  | 
获取Url参数(兼容哈希)
1  | let url='https://xxx.cn/phone/dist/index.html?dataOpenId=oppyn1BSQzOA4C1706jNWLUoaSnU&dataUserId=406f3640614511ebad49bd6e5d36a63a#/home'  | 
Elementel-cascader级联选择器动态加载及回显
误区:默认不需要自己去加载第一层数据,会自动请求第一层数据
回显只需要传入address数组即选中的id回显会自动去请求回显
addressList设置空数组即可
 1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 <el-cascader
ref="cascaderAddr"
:props="addressProps"
v-model="address"
:options="addressList"
@change="addressChange"
></el-cascader>
<script>
export default {
name: "Home",
data() {
return {
addressList:[],
address:[],
addressProps:{
label:'title',
value:'key',
lazy: true,
lazyLoad(node, resolve){
const { level } = node;
const nodes = [];
homeRecommendApi.getTree({pId:node.value}).then(res=>{
res.data.map(item=>{
let obj = {
key: item.key,
title: item.title,
leaf: level >= 3,
};
nodes.push(obj);
})
resolve(nodes);
})
}
},
};
},
};
</script>
微信小程序使用Echarts控制台报错非法颜色none
在ec-canvas文件夹下wx-canvas.js文件的_initStyle()方法中加入代码
使用
force-use-old-canvas="true"属性引起(该属性解决图表不随屏幕滚动问题)
 1
2 <ec-canvas id="progressChart" canvas-id="mychart-bar" ec="{{ ecProgress }}" force-use-old-canvas="true">
</ec-canvas>
1  | var styles = [  | 
将字符串转换成数组("[上海, 天津, 河南]")
1  | "[上海, 天津, 河南]".replace (/\[|]/g, '').split(',')  | 
浙里办数据脱敏
1  | const desensitization = (str, beginLen, endLen = -1) => {  | 
字符串首字脱敏展示
1  | const maskChineseString=(s)=>s.replace(/^(.)/, "*")  | 
Element的el-time-picker选择了时间点确定后鼠标快速移入选择框选择框再次显示问题
通过修改
css的方法(缺点:会移除显示隐藏的动画)1
2
3.el-time-panel {
transition: none ;
}失去焦点事件内手动执行关闭显示框
1
2
3setTimeout(() => {
this.$refs.timePicker.pickerVisible = false;
}, 50);最优解
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19data () {
return {
externalVisible:false
}
},
methods:{
handleOnFocus (ref) {
if(ref.pickerVisible && this.externalVisible) {
ref.pickerVisible = false
ref.blur()
}
},
handleOnBlur (ref) {
ref.picker.$on("dodestroy", () => {
this.externalVisible = false
})
this.externalVisible = true
},
}