首页 > 搜索 > 找m的软件叫什么,vue常见问题

找m的软件叫什么,vue常见问题

互联网 2020-10-24 11:45:03
在线算命,八字测算命理
CRPER2017年11月07日阅读 39474Vue 脱坑记 - 查漏补缺(汇总下群里高频询问的xxx及给出不靠谱的解决方案)前言

文章内容覆盖范围%2c芝麻绿豆的破问题都有%2c不止于vue;给出的是方案%2c但不是手把手一字一句的给你说十万个为什么!

有三类人不适合此篇文章:

"喜欢站在道德制高点的圣母婊" -- 适合去教堂"无理取闹的键盘侠" -- 国际新闻版块欢迎你去"有一定基础但又喜欢逼逼的人"得得得%2c老子知道你厉害了%2c你好牛逼%2c这些问题那么简单%2c都是小白看的这种傻瓜文%2c简直浪费老子的时间!

对于以上三类人%2c走吧%2c这里不是你来装逼的地方.你们也不值得看老子花那么多时间去汇总的水文.

学习一些新东西.若是有人给汇总那么多问题(指明方向和一定的解决法子).不用让我去各种搜索%2c汇总%2c总结%2c学习时间起码可以节省一半!

问题汇总Q:安装超时(install timeout)

方案有这么些:

cnpm : 国内对npm的镜像版本/*cnpm website: https://npm.taobao.org/*/

npm install -g cnpm --registry=https://registry.npm.taobao.org

// cnpm 的大多命令跟 npm 的是一致的%2c比如安装%2c卸载这些复制代码

yarn 和 npm 改源大法

使用 nrm 模块 : www.npmjs.com/package/nrmnpm config : npm config set registry https://registry.npm.taobao.orgyarn config : yarn config set registry https://registry.npm.taobao.orgQ:安装一些需要编译的包:提示没有安装python、build失败等

因为一些 npm 的包安装需要编译的环境%2cmac 和 linux 都还好%2c大多都齐全window 用户依赖 visual studio 的一些库和python 2+%2c

windows的小伙伴都装上:

windows-build-toolspython 2.xQ:can't not find 'xxModule' - 找不到某些依赖或者模块

这种情况一般报错信息可以看到是哪个包抛出的信息.一般卸载这个模块%2c安装重新安装下即可.

Q:data functions should return an object

这个问题是 Vue 实例内%2c单组件的data必须返回一个对象;如下

export default {name: 'page-router-view'%2cdata () {return {tabs: [{title: '财务信息'%2curl: '/userinfo'}%2c{title: '帐号信息'%2curl: '/userinfo/base'}]}}}复制代码

为什么要 return 一个数据对象呢%3f

官方解释如下: data 必须声明为返回一个初始数据对象的函数,因为组件可能被用来创建多个实例。如果 data 仍然是一个纯粹的对象,则所有的实例将共享引用同一个数据对象!

简言之%2c组件复用下%2c不会造成数据同时指向一处%2c造出牵一发而动全身的破问题...

Q:我给组件内的原生控件添加事件%2c怎么不生效了!!!

{{item.menuName}}

{{item.menuName}}

https://cn.vuejs.org/v2/guide/components.html#给组件绑定原生事件-->复制代码

Q:我用了 axios %2c 为什么 IE 浏览器不识别(IE9+)

那是因为 IE 整个家族都不支持 promise%2c 解决方案:

npm install es6-promise

// 在 main.js 引入即可// ES6的polyfillrequire(“es6-promise”).polyfill();复制代码

Q:我在函数内用了this.xxx=%2c为什么抛出Cannot set property 'xxx' of undefined;

这又是this的套路了..this是和当前运行的上下文绑定的...

一般你在axios或者其他 promise %2c 或者setInterval 这些默认都是指向最外层的全局钩子.

简单点说:"最外层的上下文就是 window%2cvue内则是 Vue 对象而不是实例!";

解决方案:

暂存法: 函数内先缓存 this %2c let that = this;(let是 es6%2c es5用 var)箭头函数: 会强行关联当前运行区域为 this 的上下文;

this的知识%2c 读""最为合适了%2c里面讲的很清楚

Q:我看一些Vue教程有这么些写法%2c是什么意思@click.prevent%2cv-demo.a.b;

就拿这两个例子来说吧.

@click.prevent : 事件+修饰符 %2c 作用就是点击但又阻止默认行为v-demo.a.b: 自定义指令+修饰符. 具体看你什么指令了%2c修饰符的作用大多是给事件增加一些确切的拓展功能

比如阻止事件冒泡%2c阻止默认行为%2c访问到原生控件%2c结合键盘快捷键等等

传送门:事件修饰符;

可以自定义修饰符么%3f也是可以的..

可以通过全局 config.keyCodes 对象自定义键值修饰符别名:

Q:为什么我的引入的小图片渲染出来却是 data:image/png;base64xxxxxxxx

这个是 webpack 里面的对应插件处理的.

对于小于多少 K 以下的图片(规定的格式)直接转为 base64格式渲染;

具体配置在webpack.base.conf.js里面的 rules里面的 url-loader

这样做的好处:在网速不好的时候先于内容加载和减少http的请求次数来减少网站服务器的负担。

Q:Component template shold contain exactly one root element.If you are useing v-if on multiple elements %2c xxxxx

大体就是说%2c单组件渲染 DOM 区域必须要有一个根元素%2c不能出现同级元素.可以用v-if和v-else-if指令来控制其他元素达到并存的状态

换个直白的解释%2c就是有一个唯一的父类%2c包裹者;

比如一个 div(父包含块) 内部多少个同级或者嵌套都行%2c但是最外层元素不能出现同级元素!!!!

Q:跨域问题怎么破!比如No 'Access-Control-Allow-Origin' header is present on the requested resource.

这种问题老生常谈了%2c我就不细说了..大体说一下;

1: CORS %2c 前后端都要对应去配置%2cIE10+2: nginx 反向代理%2c一劳永逸{// 在发送请求之前做某件事if (config.method === “post”) {// 序列化config.data = qs.stringify(config.data); // ***** 这里转义}

// 若是有做鉴权token %2c 就给头部带上tokenif (localStorage.token) {config.headers.Authorization = localStorage.token;}return config;

}%2cerror => {Message({// 饿了么的消息弹窗组件%2c类似toastshowClose: true%2cmessage: error%2ctype: “error.data.error.message”});return Promise.reject(error.data.error.message);});复制代码

Q:Invalid prop: type check failed for prop "xxx". Expected Boolean%2c got String.

这种问题一般就是组件内的 props 类型已经设置了接受的范围类型%2c而你传递的值却又不是它需要的类型%2c写代码严谨些 OK%3f

Q: 过滤器可以用于DOM区域结合指令么%3f// 不行%2c看下面的错误例子{{item}}

// vue2+的指令只能用语 mustache{{}} %2c 正确姿势如下:

{{ message | capitalize }}复制代码

Q: [...Array]%2c...mapState%2c[SOME_MUTATION] (state) {}%2cincrement ({ commit }) {}这种写法是什么鬼!

出门左拐%2cES6+(ES2015)的基础去过一遍..

上面依次:数组解构%2c对象解构%2c对象风格函数%2c对象解构赋值传递

Q: 我的 Vue 网站为什么 UC 访问一片空白亦或者flex布局错乱!!

来来来%2c墙角走起.... UC 号称移动界的 IE 这称号不是白叫的

flexbox 布局错乱%2c一般是你没有把兼容方案写上..就是带各种前缀%2c复合属性拆分看看我这篇文章:移动端爬坑记 --- (1)布局与样式上的奇葩偶遇%2c 最好就用插件来代替人力吧%2c%2c引入 autoprefixer%2c 写上兼容范围就好了.UC访问空白%2c 有一种情况绝对会造成%2c那就是 ES6的代码降级不够彻底. 其他情况可能就是路由配置问题(自己去排除)现在的开发都推荐按需引入%2c靠babel-preset-env 来控制%2c以达到打包体积减小.但是这样做的后果%2c有些内核比较老的...嘿嘿..拜拜..所以最好把代码完全 ES5话!!记住有些特性不能乱使用%2c没有对应的 polyfill%2c比如 ES6 的proxyQ:this.$set | this.$xxx 这个 $ 是个什么意思%3f是 jQuery的么%2c会冲突么%3f

且看我细细道来.

Vue 的$和 jQuery 的$并没有半毛钱的关系%2c就跟javascript和java一样.

Vue 的$是封装了一些 vue 的内建函数%2c然后导出以$开头...这显然并不是 jQuery的专利;

jQuery 的$是选择器!!取得 DOM区域...两者的作用完全不一致!

Q:Module not found: Error : Can't resolve xxx-loader in xxxx

这里问题一般就是webpack的配置文件你改动了或对应的 loader 没有装上

Q: 父组件可以直接调用子组件的方法么!

可以%2c通过$refs或者$chilren来拿到对应的实例%2c从而操作

Q:Error in event handler for "click":"xxx"

这个问题大多都是你写的代码有问题.你的事件触发了.但是组件内部缺少对应的实现或者变量%2c所以抛出事件错误.

解决方案:看着报错慢慢排查

Q: 组件的通讯有哪几种啊!!!

基本最常用的是这三种;

父传子: props子传父: emit兄弟通讯:event bus: 就是找一个中间组件来作为信息传递中介vuex: 信息树

传送门:

基本通讯VuexQ:既然localStorage和sessionStorage能做到数据维护%2c为什么还要引入vuex!

这个问题问得好%2cVuex的目的用来维护同级组件间的数据通讯%2c拥有一个共同的状态树;

仅仅活在SPA的里面的伪多页(路由)内%2c 这种东东明明然localStorage和sessionStorage也可以做到%2c还能做到跨页面数据维护..还不会被浏览器刷新干掉...

为什么还要引入 vuex%2c 我个人觉得原因只有这么一个%2c"可维护性"和"易用性"及

怎么理解呢%3f

可维护性: 因为是单向数据流%2c所有状态是有迹可循的...数据的传递也可以及时分发响应易用性: 它使得我们组件间的通讯变得更强大%2c而不用借助中间件这类来实现不同组件间的通讯

而且代码量不多%2c若是你要用 ls或者ss%2c你必须手动去跟踪维护你的状态表...虽说可行%2c但是代码量会多很多%2c而且可读性很差...

是不是每个项目都需要用到vuex%3f答案是否定的%2c小型项目上这个反而是累赘..这东西一般是用在中型项目+的%2c因为里面涉及需要维护的数据比较多%2c同级组件间的通讯比较频繁

若是用到vuex的项目记得结合ss或者ls来达到某些状态持久化!!!为什么看下面!

Q:vuex的用户信息为什么还要存一遍在浏览器里(sessionStorage or localStorage)

因为 vuex的 store 干不过刷新啊.保存在浏览器的缓存内%2c若用户刷新的话%2c值再取一遍呗;

Q:"有 Vue + Vue Router + Vuex"或什么"express + vue + mongodb"的项目学习么

Github 一搜一大堆%2c提这些问题的人动动脑子!.传送门:Github

Q:线上若是 nginx%2c如何部署%3f以及反向代理这些!!

传送门:一篇不大靠谱的nginx 1.11.10配置文件

Q:"我会 Vue 我还需要学习 jQuery 或者原生 JS 么"

jQuery还有很多公司在用%2c源码可以学习的地方很多;

原生 js 是根本%2c不管是哪个前端框架%2c最终都是 js 实现的;只有基础扎实%2c才能学的比较深...

框架只是加快开发%2c提高效率%2c但不是你在这一行长期立足的根本;

前端的人不仅需要宽度%2c也要深度...这样才能走的更远....

Q: npm run dev 报端口错误!Error: listen EADDRINUSE :::8080自己用 webpack搭脚手架的都不用我说了;Vue-cli 里面的 webpack 配置: config/index.jsdev: {env: require("./dev.env")%2cport: 8080%2c //这里这里%2c若是这个端口已经给系统的其他程序占用了.改我改我!!!!!!autoOpenBrowser: true%2cassetsSubDirectory: "static"%2cassetsPublicPath: "/"%2cproxyTable: {"/bp-api": {target: "http://new.d.st.cn"%2cchangeOrigin: true%2c// pathRewrite: {// "^/bp-api": "/"// }}}%2c复制代码Q: 什么时候用v-if%2c什么用 v-show!

我们先来说说两者的核心差异;

v-if : DOM 区域没有生成%2c没有插入文档..等条件成立的时候才动态插入到页面!有些需要遍历的数组对象或者值%2c最好用这货控制%2c等到拿到值才处理遍历%2c不然一些操作过快的情况会报错%2c比如数据还没请求到!v-show: DOM 区域在组件渲染的时候同时渲染了%2c只是单纯用 css 隐藏了对于下拉菜单%2c折叠菜单这些数据基本不怎么变动.用这个最合适了..而且可以改善用户体验%2c因为它不会导致页面的重绘%2cDOM 操作会!

简言之: DOM结构不怎么变化的用v-show%2c 数据需要改动很大或者布局改动的用v-if

Q: 是什么%2chtml5的标签么%3f

你猜对了..html5的标签还真有这么一个.传送门Can I Use:template

不过 Vue 的 template 有点不一样%2c不是去给浏览器解析的....你可以理解为一个临时标签%2c用来方便你写循环%2c判断的....因为最终 template 不会解析到浏览器的页面%2c他只是在 Vue 解析的过程充当一个包裹层!最终我们看到的是内部处理后的组合的 DOM 结构!

Q:the "scope" attribute for scoped slots …. replaced by "slot-scope" since 2.5

这个问题只出现老项目升级到 vue2.5+的时候%2c 提示就是 scope 现在要用 slot-scope 来代替%2c但是 scope 暂时可以用%2c以后会移除

Q: Uncaught ReferenceError : Vue is not defined!

依次排除:

Vue是否正确引入!Vue是否正确实例化!Vue 用的姿势是否正确(比如你直接一个 Vue 的变量!!!刚好又没定义%2c%2c具体问题具体分析吧)Q: ERROR in static/js/xxxxxxx.js from UglifyJs

我知道其中一种情况会报这种情况%2c就是你引入的 js%2c是直接引入压缩版本后的 js(xxx.min.js);然后 webpack 内又启用了 UglifyJs(压缩 JS的)%2c 二重压缩大多都会报错!!

解决方案:引入标准未压缩的 JS

Q:props不使用:(v-bind)可以传递值么!

可以%2c只是默认传递的类型会被解析成字符串!若是要传递其他类型%2c该绑定还是绑定!!

Q: Uncaught TypeError : Cannot set property xxx which has only a getter

这个问题就是你要操作的属性只允许 getter%2c不允许 setter;

解决方案%3f 用了别人的东西就要遵循别人的套路来%2c不然就只能自己动手丰衣足食了!!

Q: 单组件中里面的 import xxx from '@/components/layout/xxx'中的@是什么鬼!

这是 webpack 方面的知识%2c看到了也说下吧...

webpack可以配置alias(也就是路径别名)%2c玩过 linux 或者 mac 都知道

依旧如上%2c会自己搭脚手架的不用我说了...看看 vue-cli 里面的;

文件名: build -> webpack.base.conf.js

resolve: {extensions: [".js"%2c ".vue"%2c ".json"]%2c // 可以导入的时候忽略的拓展名范围alias: {vue$: "vue/dist/vue.esm.js"%2c"@": resolve("src")%2c// 这里就是别名了%2c比如@就代表直接从/src 下开始找起!!!"~": resolve("src/components")}}%2c复制代码Q: SCSS(SASS) 还是 less%2cstylus 好!!

三者都是预处理器;

scss 出现最久%2c能做的功能比较多%2c但是若是普通的嵌套写法%2c继承%2cmixin 啊.

这三个都差不多..会其中一个其他两个的粗浅用法基本也会了.不过!!!!

写法有些差异:

scss: 写法上是像 css 靠齐 sass : 其实也就是 scss %2c 只是写法不一样...靠的是缩进less : 跟 css 基本靠齐stylus : 一样%2c靠缩进..跟pug(Jade)一样

使用环境的差异:

scss 可以借助 ruby 或者 node-sass 编译less 可以用 less.js 或者对应的 loader 解析stylus 只能借助 loader 解析%2c它的出现就是基于 node 的

也有一个后起之秀%2c主打解耦%2c插件化的!!! 那就是PostCSS%2c这个是后处理器!!!有兴趣的可以自行去了解%2c上面的写法都能借助插件实现!

Q:Failed to compile with x errors : This dependency was not found !

编译错误%2c对应的依赖没找到!!!

解决如下:

知道缺少对应的模块%2c直接装进去若是一个你已经安装的大模块(比如 axios)里面的子模块(依赖包)出了问题%2c卸载重装整个大模块.因为你补全不一定有用!Q:SyntaxError: Unexpected identifier;

语法错误%2c看错误信息去找到对应的页面排查!!!

Q: 为什么我的 npm 或者 yarn 安装依赖会生成 lock文件%2c有什么用!

lock 文件的作用是统一版本号%2c这对团队协作有很大的作用;

若是没有 lock 锁定%2c根据package.json里面的^%2c~这些..

不同人%2c不同时间安装出来的版本号不一定一致;

有些包甚至有一些breaking change(破坏性的更新)%2c造成开发很难顺利进行!!!

Q: 组件可以缓存么%3f

可以%2c用keep-alive;

不过是有代价的..占有内存会多了...所以无脑的缓存所有组件!!!别说性能好了..切换几次%2c有些硬件 hold不住的%2c浏览器直接崩溃或者卡死..

所以keep-alive一般缓存都是一些列表页%2c不会有太多的操作%2c更多的只是结果集的更换..

给路由的组件meta增加一个标志位%2c结合v-if就可以按需加上缓存了!

Q:package.json里面的dependencies 和devDependencies的差异!

其实不严格的话%2c没有特别的差异;若是严格%2c遵循官方的理解;

dependencies : 存放线上或者业务能访问的核心代码模块%2c比如 vue%2cvue-router;devDependencies: 处于开发模式下所依赖的开发模块%2c也许只是用来解析代码%2c转义代码%2c但是不产生额外的代码到生产环境%2c 比如什么babel-core这些

如何把包安装到对应的依赖下呢%3f

npm install --save xxxx // dependenciesnpm install --save-dev xxxx // devDependencies

//也能用简易的写法(i:install%2c-S:save%2c-D:save-dev)

npm i -S xxxx // npm install --save xxxxnpm i -D xxxx // npm install --save-dev xxxx复制代码

Q: 安装chromedriver报错!!姿势没错啊npm i -D chromedriver

恩%2c伟大的 GFW.....解决方案:指定国内的源安装就可以了

npm install --save-dev chromedriver --chromedriver_cdnurl=http://cdn.npm.taobao.org/dist/chromedriver

Q:Vue %2cReact%2c Angular学习哪个好%3f哪个工作比较好找!

Vue属于渐进式开发%2c传统开发过渡 MVVM 模式的小伙伴%2cVue 比较好上手%2c学习成本比较低基础比较好的%2c有折腾精神的%2c可以选择NG5或者React 16;

NG5需要学习typescript和rxjs%2c还用到比较多的新东西%2c比如装饰器%2c后端的注入概念.ng有自己的一整套 MVVM 流程;

而Vue和React核心只是view%2c可以搭配自己喜欢的

React的写法偏向函数式写法%2c还有 jsx%2c官方自己有 flow%2c当然也能搭配ts%2c我也没怎么接触..所以也有一定的学习成本;

至于哪个比较好找工作!!!告诉你..若是只会一个框架%2c那不是一个合格的前端;

人家要的是动手能力%2c解决能力!!!!技术和待遇是成正比的!!

颜值和背景%2c学历%2c口才可以加分..但是这些条件你必须要有的基础下才能考虑这些!!!

Q: 我有个复杂组件需要有新增和编辑的功能同时存在%2c但是字段要保持不变性怎么破

字段保持不变性怎么理解呢%3f 就是说比如新增和编辑同时共享一份 data;

有一种就是路由变了%2c组件渲染同一个(不引起组件的重新渲染和销毁!)%2c但是功能却不同(新增和编译)..

比如从编辑切到新增%2cdata必须为空白没有赋值的%2c等待我们去赋值;

这时候有个东西就特别适合了%2c那就是immutable-js;

这个东西可以模拟数据的唯一性!或者叫做不变性!

Q:"首屏加载比较慢!!怎么破!打包文件文件比较大"

依次排除和确认:

减少第三方库的使用%2c比如jquey这些都可以不要了%2c很少操作 dom%2c而且原生基本满足开发若是引入moment这些%2cwebpack 排除国际化语言包webpack 常规压缩js%2ccss%2c 愿意折腾的还可以引入 dll 这些路由组件采用懒加载加入路由过渡和加载等待效果%2c虽然不能解决根本%2c但起码让人等的舒心一点不是么!!!

整体下来%2c打包之后一般不会太大;

但是倘若想要更快%3f那就只能采用服务端渲染(SSR)了%2c可以避免浏览器去解析模板和指令这些;直接返回一个 html ....还能 SEO...

Q: Vue SPA 没法做优化(SEO)!有解决方案么

可以的%2cSSR(服务端渲染就能满足你的需求)%2c因为请求回来就是一个处理完毕的 html

现在 vue 的服务端开发框架有这么个比较流行%2c如下

传送门:Nuxt.js

Q: Vue可以写 hybird App 么!

当然可以%2c两个方向.

codorva + nativescriptWeexQ: Vue 可以写桌面端么%3f

当然可以%2c有electron和node-webkit(nw);

我只了解过electron;

electronelectron-vue: Vue-cli 针对 electron 的脚手架模板Q: Vue开发%2c项目中还需要 jQuery么

分情况探讨:

若是老项目%2c只是单纯引入 Vue 简化开发的%2c依旧用吧...重构项目%3f或者发起新项目的%2c真心没必要了.开发思路不一样%2c很多以前用 DOM 操作的现在基本可以数据驱动实现%2c而少量迫不得已的DOM 操作原生就能搞定...而且能减小打包体积%2c速度又快%2c何乐而不为!!!Q:Vue PC(桌面)端%2cM(mobile:移动)端%2c用什么 UI 框架好啊!!!

PC

我推荐的只有两个 element UI和iview

Mobile

Vux

当然还有很多%2c但是基本用户的认知度都不高%2c这三个比较流行

Q: Vue可以写微信小程序么%2c怎么搞起

可以的%2c社区也有人出了对应的解决方案%2c比如比较流行的方案wepy;wepy你也可以理解为一个脚手架%2c让你的写小程序的方式更贴近你用vue-cli写 vue 的感觉...

传送门:wepy

Q:想要 mock 数据%2c直接请求 json文件 为什么不行!

当然不行%2c浏览器安全机制不允许%2cJS天生不能越权(NodeJS不能单纯说是JS)

你要 mock 数据%2c一般都有比较成熟的方案...传送门:

MockEasy MockVue 周边库汇总

Awesome Vue : 里面收集了 Vue 方方面面的热门库!!

Vue 最近的动态据说 Vue 3 打算用Proxy拦截器来做数据拦截及响应..这样可以检测到更多数据类型的响应;不过 IE系列全军覆没%2cpolyfill 都不行Vue 目前最新 2.5.3 核心库已适配 typescript 2.6; 但是周边库没跟上(比如第三方的 UI 框架%2c没有更新对应的 d.ts编译器会报错)..若是组件基本都是自己去写%2c用 ts+vue开发已经没什么特别的坑了...结语

问题就汇总了这么多...还有一些以前看到了.但是忘记了..想不起来了...后续有看到再补上.

小伙伴们也可以留言补充%2c我会及时跟进....

不过现在的新人好浮躁%2c一言不合就做伸手党...不愿花时间去折腾.无解.....

希望该篇文章可以帮到一些小伙伴节省时间,加快开发。

最后送上一张我群里的提问图...!!!!

调试是不可能调试的,只能靠群聊天解决bug这个样子。超喜欢这个群,群里的人,又厉害说话又好听%2cO(∩_∩)O~

免责声明:非本网注明原创的信息,皆为程序自动获取互联网,目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责;如此页面有侵犯到您的权益,请给站长发送邮件,并提供相关证明(版权证明、身份证正反面、侵权链接),站长将在收到邮件12小时内删除。

相关阅读

一周热门

查看更多