vue常见的坑(vue常见问题)

今天给各位分享vue常见的坑的知识,其中也会对vue常见问题进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

本文目录一览:

typescript+vue踩过的坑-常见报错

原因: typescript不能识别.vue文件

解决办法: 引入vue的typescript declare库

在tsconfig.json中加入

其中,types是自己延伸的一些declare

下面的是vue中的types拓展

改后的tsconfig

原因: 问题同上,使用node/vue的types没起作用

解决办法: 自己写一个。上面的tsconfig中。types就是为了让我们多一些自己的declare。

里面写上

原因:缺少typescript类型

解决方法:

抛出错误 Property '$message' does not exist on type

一、(推荐)

二、起作用

三、(推荐)

在types下新建如下目录结构

相当于扩展typescript的declare

4.XMLHttpRequest is not defined

在typescript中,经常要用一些自己从其他js插件中引入的变量。

但直接在ts中写,ts会报not defined的错误

解决办法: 使用window.XMLHttpRequest

关于Vue ,key ,el-table, :row-key遇到的一个坑

vue前端开发,经常遇到key为undefine的bug,如图

很多时候 我们把后台返回的Id赋值给key,但是该死的后台返回的Id居然也有重复的时候。

这个时候会出现各种意外情况,入页面卡死,页面空白,下拉列表点不动等等错误。

特别的el-table有写特殊功能需要我们把row-key赋值,如果key重复,渲染就会失败。

为了防止key重复,我们会想当然的认为返回一个随机数字就可以了,所以会这样返回一个随机字符串

Math.random()+'';

但是这其实是有坑的,这只是解决了首次渲染的问题,但是第二次渲染时,有部分元素我们是希望他重复使用的,这样渲染效率性能更好。而且很重要的,有些情况必须这样。例如

这个情况会导致下拉框无法下拉,因为当下拉时页面重新渲染,重新渲染又导致父元素被删除了,所以无法下拉。

key重复 就是 该为不同时却识别为相同了

key一直随机,就是该识别为相同 识别为不同了

下面提供一个生成key的函数 解决Key重复,key随机问题

Vue项目开发过程中遇到的坑

1 从浏览器中了解这个应用的呈现结果,对整个应用具有的大功能模块有个大致了解,比如包含欢迎页、用户管理、业务数据查询等;

2 学习了解Vue项目的默认目录结构及加载流程,比如文件index.html、package.json、main.js,目录/build、/config、/src等。

参考链接 :

优雅的 Vue 项目目录结构设计

VUE启动流程

涉及state对象使用的,大部分是需要先引入vuex,而vuex对象的定义及处理文件,都默认存放在工程的/src/store目录下,到该目录下的相应文件中可找到其他文件依赖的变量数据。

参考链接 :

Vuex 是什么?

import语法是很多其他语言中都有的关键词,较易理解,但export是干什么用的,export default和export又有什么区别,其他文件是如何使用export出去的变量的?

参考链接 :

export default 和 export 区别

工程中经常见到v-auth指令,从字面意思上可以理解为权限的验证,但在网上搜不到该指令的含义和用法,后才得知为本应用的自定义指令,并有专门针对该指令进行定义的函数。

参考链接 :

自定义指令

刚对Vue的组件概念有些了解时,会把所有的元素标签都认为是Vue自定义组件的一部分,然后开始到工程中去找该组件的定义,其实还有很多是官方组件,比如el-popover、el-table、el-table-column等,到相应的官网上找标签的定义和用法即可。

参考链接 :

Element UI 教程

1 默认用的intellij idea作为Vue工程的开发IDE,在该IDE中启动Vue工程,需要安装node js,并在IDE中配置Run Configurations,详细配置见下面的参考链接;

2 配置好运行参数之后,在启动过程中报错:Error: listen EACCES: permission denied 0.0.0.0:80,该错误的原因为本地80端口被占用,通过关闭80端口占用进程或修改配置文件中的端口号即可正常启动。

参考链接 :

idea运行vue项目

用idea在本地调试时,只要运行npm run dev即可,但若将分支部署到服务器上,则需先在本地运行npm run build进行编译,然后将编译完的文件上传至git,这样用自动化集成工具进行集成时,才可从git中拉取解析后的文件并正常被web服务读取(该操作与java工程在git中只保存源码不同)。

VUE-PC端项目遇到的坑总结

其中说到跨域的话首要的就是axios的配置

主要原因是后台使用的是Multipart数组接收,vue这边使用的是formdata,红框一定要这样写,我被坑了好久,并且传输文件类的时候,不需要设置contentType,由于我用axios共同全局设置了这个 'Content-Type': 'multipart/form-data' 之后导致浏览器解析的时候,没有这个boundry(见图),最后还是用了vue-resource中的http解决的

由于后台不让前端带上角色和权限之类的信息,全部从后端拿数据,导致前端必须全部配置好所有的路由,通过后端返回的菜单信息filter出自己的菜单信息后显示

想要刷新页面就是这方法吧,挺好用

refreshPage() {

      location.reload()

    }

场景:比如商品详情数据,依赖路由的params参数获取的(ajax写在created生命周期里面),因为路由懒加载的关系,退出页面再进入另一个商品页面并不会运行created组件生命周期,导致文数据还是上一个数据。

解决方法:watch监听路由是否变化

watch: {

  '$route' (to, from) { //监听路由是否变化

    if(this.$route.params.id){//是否有id

      //获取数据

    }

  }

}

记录app webview内嵌vue单页应用所遇到的坑

so在这个过程中无可避免的还是踩了一些坑,所以记录之,先大致说下用到的技术栈:vue全家桶(vue/vue-router/vuex)、sass、axios还有一套ui框架mint-ui,大致也就这些。下面来扒扒都遇到哪些坑。

1.vue-cli脚手架打包的项目部署到服务器上打开空白

首先可以确保路径是没问题的,vue-cli打包生产环境直接修改config目录下的index文件即可。将assetsPublicPath指向你所要放置的服务器目录,并用最后一个文件夹名作为你的项目名。如 。 那路径没问题的话。问题出在哪里呢?经过排查,是vue-router中将mode设置为'history'的缘故。由于一开始以hash模式的url是带'#'号的,本来想着让url好看点,所以用了history模式。虽然在本地调试的时候没问题,但是不部署的话还是需要后台进行相关配置的。这里百度一大堆,不赘述了,随便贴个地址, 看这里

2.webview上自带的坑

讲真的这个只能找你们移动开发的同事。比如我这边遇到的是H5页面内嵌的时候上拉下拉会出现回弹的效果,这是他们加上的,这个难免会对h5造成一些手势冲突。比如我只是想滑动底部的时间选择器来选时间,但是页面不受控制会自动上弹。还有就是定位在中部或底部的输入框,理应在弹出软键盘时自动将键盘顶上去的,这个也应该由移动端开发那边来做相关设置。

3.单页应用不重载页面导致无法调用IOS的某些回调函数

这个是真的坑。在浏览器上跑都好好的,内嵌进app的时候发现ios打开页面后一直有一朵小菊花在loading,尽管数据已经加载完成了。切换页面也一样,除非刷新页面。那问题来了,谁的锅?又是经过一系列排查,发现这个是单页应用跟移动端那边开发的控件相互作用引起的坑。(关我毛事?)那个loading控件是移动端那边用来判断webview加载情况的,在网络请求跟数据请求时都会调用打开这个控件,然而悲剧的是关闭这个控件也就是 WebviewDidFinishLoad 函数却必须是页面有进行重载才会发起调用的,也就是说loading你是开了,但是我 单页应用 怎么来都是在一个页面上操作,自然 不会重载 ,所以也就导致了那朵小菊花一直在转,这也是为什么强制刷新的话可以关闭掉loading控件的原因。这个嘛安卓那边不会有问题,所以应该是ios开发那边的问题,就算loading也应该有个时长可以关闭,或者可以写个接口通过webview的形式让前端去手动调用关闭loading控件,都是可以的。

4.es6对于一些老旧的安卓机型和浏览器的兼容问题

这个一开始还是比较头痛的,毕竟是上了线才发现的问题,陆陆续续在后台收到一些安卓机的反馈,打开活动页面一片空白。看了下大多是安卓4.4.2还有一些4.4以下的安卓机型。这尼玛vuejs不是兼容到安卓4.4吗?所以一开始以为是axios跟mint-ui的问题,但后面发现其实不是。主要原因是对es6兼容不够到位,虽然vue-cli引入了babel对js语法进行降级,但是还是有些老旧的机型会发生各种各样的问题,这里需要引入一个叫babel-polyfill的包。所以你只需只在你引入import vue之前 import babel-polyfill进来就可以了,主要是为了让es6对个别机型做到兼容。

Vue开发之坑四-return a||b 可行 return b||a报错

A、B两个组件同时调用如下子组件

因为A、B两个组件传给子组件的item值不一样,A的item中的图片路径在item.show.img, B的item中的图片路径在item.image,所以采用计算属性判断图片路径是哪一个。

但是在B组件中,报错了,A组件中没有报错。

在计算属性的两个路径的顺序调换后,即换成

后,在A、B两个组件中没有报错。

这就困惑了。

当a、b两个值为一真一假的时候,return a||b 和 return b||a 不是等值的么?为啥报错呢?

其实,初看之下,return a||b 和 return b||a 是等值不错,但问题出在a、b具体的值这里。

当计算属性判断语句为

的时候,先判断item.show.img是否为真,在B组件的调用子组件中,item.show.img不仅不存在,而且还报错,因为item.show.img为三层结构,当中间层show都不存在的时候,去找show下面的img就会报错,而不是想象中的返回false

当先判断 item.image的时候,在B组件的调用中,此时为真,所以顺利给图片路径赋值;在A组件调用的子组件中,item.image为二层结构,item下没有image,返回false,给A组件调用的子组件的图片路径赋值item.show.img

vue常见的坑的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于vue常见问题、vue常见的坑的信息别忘了在本站进行查找喔。

1、本网站名称:源码村资源网
2、本站永久网址:https://www.yuanmacun.com
3、本网站的文章部分内容可能来源于网络,仅供大家学习与参考,如有侵权,请联系站长进行删除处理。
4、本站一切资源不代表本站立场,并不代表本站赞同其观点和对其真实性负责。
5、本站一律禁止以任何方式发布或转载任何违法的相关信息,访客发现请向站长举报
6、本站资源大多存储在云盘,如发现链接失效,请联系我们我们会第一时间更新。
源码村资源网 » vue常见的坑(vue常见问题)

1 评论

您需要 登录账户 后才能发表评论

发表评论

欢迎 访客 发表评论