vue开发常见问题记录

vue开发过程中遇到的一些小问题、小技巧等,会不断更新~

记录不详细处,欢迎留言🎉

1.设置路径别名,以后再引入static/util/Geometry.js 文件时可以这样写:

1 import geometry from '@/util/Geometry'

 

2.使用前端组件引入自定义标签时eslint会报错,可以加入一下配置忽略检查

1 'vue/no-parsing-error': [2, { "x-invalid-end-tag": false }]

 

3.打包后部署出现空白页,修改assetsPublicPath

 

4.iview图标build后不显示的问题

 修改webpack.prod.conf.js文件  extract: false

1 const webpackConfig = merge(baseWebpackConfig, {
2   module: {
3     rules: utils.styleLoaders({
4       sourceMap: config.build.productionSourceMap,
5       extract: false,
6       usePostCSS: true
7     })
8   },

或者修改build/utils文件,添加

publicPath: '../../'配置
 1  // Extract CSS when that option is specified
 2     // (which is the case during production build)
 3     if (options.extract) {
 4       return ExtractTextPlugin.extract({
 5         use: loaders,
 6         publicPath: '../../', // 解决打包后iView的icon不显示的问题
 7         fallback: 'vue-style-loader'
 8       })
 9     } else {
10       return ['vue-style-loader'].concat(loaders)
11     }

 

5.开启Gzip

 

6.修改数组vue不能侦测到变化

例如,需要修改数组最后一项的值,可以这样

1 // 不可以直接使用this.layers[index][2] = '',这样VUE侦听不到数组的变化,不会触发view变化
2 this.layers[index].pop()
3 this.layers[index].push('')

不过,vue对数组进行了增强,可以更优雅:

1 Vue.$set(array,  index,  value)
2 this.$set(array,  index,  value) // 实例中使用

 7.控制台出现Uncaught (in promise)错误,

在main.js加入如下内容:

1 // fixed 'Uncaught (in promise)' error 
2 import Router from 'vue-router' 
3 const originalPush = Router.prototype.push
4 Router.prototype.push = function push(location) {
5   return originalPush.call(this, location).catch(err => err)
6 }

 或者删除node_modules文件夹,重新npm install

8.引入iconfont编译报错,

最后发现删除了webpack.base.conf.js中的style-loader!css-loader重新编译就好了

 9. key值重复报错

使用index绑定到key即可避免

10.使用sass时报错Module build failed: TypeError: loaderContext.getResolve is not a function

 可能是sass-loader的版本过高导致,可以试试:

1 cnpm install sass-loader@7.3.1 -D

另外说明一下vue项目中使用sass的配置:

1.安装node-sass和sass-loader

1 cnpm install node-sass sass-loader@7.3.1 -D

2.build\webpack.base.conf.js的rules中增加配置

1 {
2         test: /\.scss$/,
3         loaders: ['style', 'css', 'sass'],
4         exclude: /node_modules/
5       },

3.在style标签中增加lang="scss"

1 <style lang="scss" scoped>
2 
3 </style>

11.编译时提示:{ parser: "babylon" } is deprecated; we now treat it as { parser: "babel" } 

可能是因为prettier导致,重新安装prettier即可

1 cnpm install prettier@~1.12.0 -D

 12.覆盖element-ui组件的默认样式

以Element UI的Date Picker为例,默认样式是这样的:

 

 

 而我想要的是这样的:背景色、字体大小颜色、以及每个数字占据的空间大小都会改变。

步骤如下:

1.在使用该组件的vue文件里面新增加一个style标签,不加scoped属性

1 <style lang='scss">
2 // 查找组件的class,重写需要的样式
3 </style>a

2.查找需要修改的样式的元素的class,重写样式即可:

 1 <style lang="scss">
 2 $fontColor: #fff;
 3 $backgroundColor: #555;
 4 $SelectBackgroundColor: rgba(250, 250, 250, 0.1);
 5 .el-date-editor {
 6   background-color: $backgroundColor;
 7   color: $fontColor;
 8 
 9   .el-range__close-icon,
10   .el-icon-date,
11   .el-range-separator {
12     color: $fontColor;
13   }
14   .el-range-input {
15     color: $fontColor;
16     background-color: $backgroundColor;
17   }
18 }
19 
20 .el-popper[x-placement^="bottom"] .popper__arrow::after {
21   border-bottom-color: $backgroundColor;
22 }
23 
24 .el-picker-panel {
25   width: 512px;
26   color: $fontColor;
27   background-color: $backgroundColor;
28   .el-picker-panel__icon-btn {
29     color: $fontColor;
30   }
31   .el-date-range-picker__header {
32     height: 24px;
33   }
34   .el-date-table {
35     th {
36       color: $fontColor;
37       padding: 2px;
38     }
39     td {
40       span {
41         height: 20px;
42         width: 20px;
43         line-height: 20px;
44       }
45       div {
46         height: 26px;
47       }
48     }
49   }
50   .el-date-table td.in-range div {
51     background-color: $SelectBackgroundColor;
52   }
53 }
54 </style>
View Code

3.因为新写的样式没有scoped属性,会影响其他也用到Date Picker的页面,

如果只想让重写的样式只作用一个组件,可以给Date Picker添加自定义类名,重写样式时添加上类名即可:

html:

 1 <el-date-picker
 2       class="custom-date-picker"
 3       popper-class="custom-date-picker-popper"
 4       type="daterange"
 5       align="right"
 6       unlink-panels
 7       v-model="date"
 8       start-placeholder="开始日期"
 9       end-placeholder="结束日期"
10     ></el-date-picker>

       注:

     1.class="custom-date-picker"是为el-date-picker添加的类名,
2.下面选择日期的弹出框比较特殊,通过popper-class为其绑定了class="custom-date-picker-popper"

css:

 1 <style lang="scss">
 2 $fontColor: #fff;
 3 $backgroundColor: #555;
 4 $SelectBackgroundColor: rgba(250, 250, 250, 0.1);
 5 .custom-date-picker.el-date-editor {
 6   background-color: $backgroundColor;
 7   color: $fontColor;
 8 
 9   .el-range__close-icon,
10   .el-icon-date,
11   .el-range-separator {
12     color: $fontColor;
13   }
14   .el-range-input {
15     color: $fontColor;
16     background-color: $backgroundColor;
17   }
18 }
19 
20 .custom-date-picker-popper.el-popper[x-placement^="bottom"] .popper__arrow::after {
21   border-bottom-color: $backgroundColor;
22 }
23 
24 .custom-date-picker-popper.el-picker-panel {
25   width: 512px;
26   color: $fontColor;
27   background-color: $backgroundColor;
28   .el-picker-panel__icon-btn {
29     color: $fontColor;
30   }
31   .el-date-range-picker__header {
32     height: 24px;
33   }
34   .el-date-table {
35     th {
36       color: $fontColor;
37       padding: 2px;
38     }
39     td {
40       span {
41         height: 20px;
42         width: 20px;
43         line-height: 20px;
44       }
45       div {
46         height: 26px;
47       }
48     }
49   }
50   .el-date-table td.in-range div {
51     background-color: $SelectBackgroundColor;
52   }
53 }
54 </style>
View Code

 

posted on 2019-07-18 15:54  橘生淮南_  阅读(467)  评论(0)    收藏  举报