vue开发遇到问题总结

112 阅读2分钟

一起养成写作习惯!这是我参与「掘金日新计划 · 4 月更文挑战」的第13天,点击查看活动详情

项目启动不起来

项目报 Vue packages version mismatch,启动不起来

image.png

解决办法 重新单独安装提示冲突的模块  比如如上的冲突,更新vue-template-compiler, 命令行输入

npm i vue-template-compiler@2.6.10 --save

再重新启动就可以了 npm run dev

vue项目自动读取缓存中的数据,不重新发请求

解决方案: 请求增加时间戳

// 在每个请求上增加时间戳 
config.url = `${config.url}?_t=${+new Date()}`

静态资源处理

assets目录中的文件会被webpack处理解析为模块依赖,只支持相对路径形式。 background: url(./logo.png)中,"./logo.png" 是相对的资源路径,将由Webpack解析为模块依赖。

static/ 目录下的文件并不会被Webpack处理:它们会直接被复制到最终的打包目录(默认是dist/static)下。必须使用绝对路径引用这些文件,这是通过在 config.js 文件中的 build.assetsPublicPath 和 build.assetsSubDirectory 连接来确定的。

任何放在 static/ 中文件需要以绝对路径的形式引用:/static/[filename]。

在我们实际的开发中,总的来说:stac放不会变动的文件 assets放可能会变动的文件

组件强制刷新

场景1:当组件动态赋值,dom却不能及时更新,无法及时渲染出正确的结果时,可以采用组件强制刷新的方法模版上绑定key

//模版上绑定key
<SomeComponent :key="theKey"/>
//选项里绑定data
data(){
  return{
      theKey:0
  }
}
//刷新key达到刷新组件的目的
theKey++;

场景2:因为组件嵌套太深,导致组件无法刷新或el-option绑定的List数据过多,导致来不及渲染。可以在@change方法内加入官方给出的更新选择框视图方法 $forceUpdate强制更新

//模版上绑定change
<el-select @change="changeContent"/>
// 官方给出的更新选择框视图方法
this.$forceUpdate() 
//刷新key达到刷新组件的目的
changeContent (val) {
  this.$forceUpdate()
},