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>
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>
浙公网安备 33010602011771号