vue项目中的常见问题(vue-cli版本3.0.0)
一、样式问题
1.vue中使用less
安装less依赖 npm install less less-loader --save-dev
在使用时 在style标签中加入 lang="less"
也可以加上scoped
代表样式只在此作用域中有效。
2.使用element插件时修改其样式,在vue中不起作用,这里有几种方法可以尝试
- 如果
style
中加了scoped
去掉它。 - 在要改变的样式前加
/deep/
/deep/.el-submenu__title .el-icon-arrow-down{
margin-top:-5px;
}
<h3>二、<code>vue-router</code> 问题</h3>
<p>1.去掉vue项目路径中的 <code>#</code></p>
<p>主要用到<code>router</code> 的 <code>history</code>模式。官网说的很详细,以及注意点:<a href="https://router.vuejs.org/zh-cn/essentials/history-mode.html" rel="nofollow noreferrer">vue-router官网 HTML5 History模式</a></p>
<p>2.当我们通过router 中的query从一A页面想给B页面传递一个Object 对象形式的数据时,第一次B页面可以拿到数据,但是刷新B页面后,数据会消失。这里有一下解决方法:</p>
<ul>
<li>将A页面的数据通过 JSON.stringify() 变成字符串,传递</li>
<li>将A页面数据存储在sessionStorage 中,B页面同该sessionStorage 获取</li>
<li>后台提供单独的接口,在B页面请求A页面传过来的数据</li>
</ul>
<h3>三、页面预渲染(seo优化问题)</h3>
<p>官网也指出,如果你只是为了改善营销页面的SEO优化,你可能需要预渲染了。而无需使用web服务器实时动态变异html,而是使用预渲染方式,在构建时简单地生成针对特定路由的静态 HTML 文件</p>
<p>1.预渲染</p>
<p>如果你想要预渲染需要使用 <code>prerender-spa-plugin</code> 插件来处理你的文件。这里建议你直接看官网的<code>api</code>, <code>2.x</code>版本的和<code>3.x</code>版本的<code>api</code>不同。所以建议直接看官网了解最新的<code>api</code>。 <a href="https://github.com/chrisvfritz/prerender-spa-plugin" rel="nofollow noreferrer">prerender-spa-plugin GitHub</a></p>
const path = require('path')
const PrerenderSPAPlugin = require('prerender-spa-plugin')
module.exports = {
plugins: [
...
new PrerenderSPAPlugin({
// 生成文件的路径
staticDir: path.join(__dirname, 'dist'),
// 对应路由生成的目录
routes: [ '/', '/about', '/some/deep/nested/route' ],
})
]
}
<p>另外为页面做Meta SEO优化 可以使用 <code>vue-meta-info</code> <a href="https://github.com/monkeyWangs/vue-meta-info" rel="nofollow noreferrer">GitHub地址</a></p>
<p><a href="https://zhuanlan.zhihu.com/p/29148760" rel="nofollow noreferrer">vue-meta-info的相关文章</a></p>
<h3>四、数据响应失效</h3>
<p>首先在<code>Vue.js</code> 中对象的响应时依赖<code>Object.defineProperty</code> 方法的,而对于数组是没有这个方法的。</p>
<blockquote>这里需要注意,如果数组中是对象,当对象里数据变化时是可以渲染的,如果类似<code>[0,1,2,3]</code>这样的数组,数据变化时,是不会渲染的。</blockquote>
<p>所以数组存储的数据在更改时是没有响应变化的。所以<code>Vue</code>提供了<code>$set()</code> 方法: <a href="https://cn.vuejs.org/v2/api/#Vue-set" rel="nofollow noreferrer">官网</a></p>
vue.array.$set(0,'change')
<h3>五、数据双向绑定问题</h3>
<p>1.在使用vuex时,我们两个模块可能使用同一个数据,比如两模块中的表单使用的是同一个数据,当其中一个模块中的表单填写好时,我们进入另一个模块表单时,也会显示该数据,如果该数据少还可以,如果有很多字段,我们一个一个清空会和麻烦,我这里解决的办法就是:使用<code>JSON.stringify</code> 和 <code>JSON.parse()</code></p>
let evaluateReq = { // 初始数据
type:'0',
pageSize:10,
pageNum:1,
}
const state = {
evaluateListReq:JSON.parse(JSON.stringify(evaluateReq)),
}
<p>这样做,当我们初始化 <code>evaluateListReq</code> 数据时,可以讲 <code>evaluateReq</code> 数据 通过 <code>mutations</code> 赋值给<code>evaluateListReq</code> ,如果我们这里不使用<code>JSON.stringify</code> 和 <code>JSON.parse()</code> 而直接赋值, <code>evaluateReq</code> 中的数据与 <code>evaluateListReq</code> 会被vue认为是同一个数据,都绑定上,一个值变化,都会随着变化。</p>
<h3>六、使用Element(饿了么)插件问题</h3>
<p>1.<code><le-input></code>表单使用回车触发事件。</p>
<el-input @keyup.enter.native="onSubmit" ></el-input>
<p>这里需要在<code>@keyup.enter</code> 后面加上<code>native</code>才会触发回车事件。这个东西在一些实际上处理 DOM 原生事件的场合才需要添加额外的标识符。</p>
<p>2.当浏览器窗口变小时,<code>el-table</code>组件宽度不随窗口响应变小。</p>
<p>这里我们需要冲突掉<code>Element</code> 中<code>el-table</code> 的 <code>max-width:100%</code> 样式,该值不能设置成100%,可以改成99%,小于100%即可。</p>
.el-table{
max-width:99.9%
}
<h3>七、axios 交互问题</h3>
<p>1.vue中创建excel 的下载,解决excel下载乱码问题</p>
<p>我们可以在axios的请求拦截或响应拦截中去动态创建a标签下载excel</p>
function excelDown(res){ // excel 下载请求
//application/vnd.openxmlformats-officedocument.spreadsheetml.sheet这里表示xlsx类型
var blob = new Blob([res.data], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet;charset=utf-8'});
var downloadElement = document.createElement('a');
var href = window.URL.createObjectURL(blob); //创建下载的链接
downloadElement.href = res.request.responseURL +&token=${sessionStorage.JRYC_TOKEN}
;
downloadElement.download = '列表.xls'; //下载后文件名
document.body.appendChild(downloadElement);
downloadElement.click(); //点击下载
document.body.removeChild(downloadElement); //下载完成移除元素
window.URL.revokeObjectURL(href); //释放掉blob对象
}
axios.interceptors.response.use(res => {
if (res.headers['content-type'] == 'application/vnd.ms-excel' || res.headers['content-type'] == 'application/vnd.ms-excel;charset=UTF-8') {
excelDown(res)
return {code:0,state:'success'}
}else{
return res
}
})
<h3>八、其它注意事项</h3>
<p>1.使用v-for 时我们尽量携带key值,以方便vue的渲染。</p>
v-for="(item, index) in list" class="list" :key="index"
<p>2.在使用 <code>import ... from ...</code> 引入同级目录下的组件时,尽量加上 <code>./</code> , 不然有时会报错</p>
import Header from './Header';
<p>3.使用<code>$emit</code> 不起作用,这里我建议你在子组件绑定父组件事件时 使用 <code>v-on</code> 全写,尽量不使用<code>@</code> 缩写,因为使用<code>@</code> 缩写有时会不起作用</p>
<edit-add-ver v-on:childMethodShow="showEdit"></edit-add-ver>
<h3>九、vue-cli 目录的分析以及我个人常用的项目构建</h3>
<p>具体目录分析进入 <a href="https://github.com/webxiaoma/vue-demos/tree/master/vue-cli" rel="nofollow noreferrer">https://github.com/webxiaoma/vue-demos/tree/master/vue-cli</a></p>
原文地址:https://segmentfault.com/a/1190000014256745
vue项目中的常见问题(vue-cli版本3.0.0)的更多相关文章
- vue项目中的常见问题
总结了几个vue项目开发过程中遇到的常见问题,希望大家注意. 注:文末有福利! 一.样式问题 1.vue中使用less 安装less依赖 npm install less less-loader -- ...
- Vue项目中使用基于Vue.js的移动组件库cube-ui
cube-ui 是滴滴公司的技术团队基于 Vue.js 实现的精致移动端组件库.很赞,基本场景是够用了,感谢开源!感谢默默奉献的你们. 刚爬完坑,就来总结啦!!希望对需要的朋友有小小的帮助. (一)创 ...
- <转载> VUE项目中CSS管理
vue的scoped 在vue项目中,当 .vue文件中 <style> 标签有 *scoped 属性时,它的 CSS 只作用于当前组件中的元素,很好的实现了样式私有化的目的. 使用sco ...
- vue项目中net::ERR_CONNECTION_TIMED_OUT错误
我出错的原因时network地址与我本机ip地址不一致 Network: http://192.168.13.30:8080/ 处理方法: 在vue项目中新建一个vue.config.js文件 配置上 ...
- vue项目中使用ts(typescript)入门教程
最近项目需要将原vue项目结合ts的使用进行改造,这个后面应该是中大型项目的发展趋势,看到一篇不错的入门教程,结合它并进行了一点拓展记录之.本文从安装到vue组件编写进行了说明,适合入门. 1.引入T ...
- 如何在VUE项目中添加ESLint
如何在VUE项目中添加ESLint 1. 首先在项目的根目录下 新建 .eslintrc.js文件,其配置规则可以如下:(自己小整理了一份),所有的代码如下: // https://eslint.or ...
- 转:如何在Vue项目中使用vw实现移动端适配
https://www.w3cplus.com/mobile/vw-layout-in-vue.html 有关于移动端的适配布局一直以来都是众说纷纭,对应的解决方案也是有很多种.在<使用Flex ...
- 在vue项目中引入jquery
在vue项目中引入jquerycnpm install jquery --save在main.js中引入,加入下面这行代码:import 'jquery'注:有些项目是按需加载的,在main.js里面 ...
- vue项目中postcss-pxtorem的使用及webpack中的配置 css中单位px和em,rem的区别
移动手机版要求我们在制作嵌入h5的时候去适配不同的手机.适配有多重模式,有flex.百分比等.字体大小的控制也有px.百分比.rem等单位,webpack中 px转rem. vue项目中postcss ...
随机推荐
- PHP正则表达式-从文本中提取URL
1.从文本中提取URL的正则表达式 '/https?:\/\/[\w-.%#?\/\\\]+/i'
- 是否能重拾Linux下Init 3的快感?
对于Windows大多数程序猿(眼下).是否非常怀念Linux下全字符界面的炫酷与优越感? 是否仍然停留在cmd后,将文件拖到dos下简单的操作呢?以下是近期研究在Windows下用全命令行的方 ...
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- 洛谷 P2055 [ ZJOI 2009 ] 假期的宿舍 —— 二分图匹配
题目:https://www.luogu.org/problemnew/show/P2055 二分图匹配: 注意要连边的话对方必须有床! 代码如下: #include<iostream> ...
- Javascript中的Object对象
Object是在javascript中一个被我们经常使用的类型,而且JS中的所有对象都是继承自Object对象的.虽说我们平时只是简单地使用了Object对象来存储数据,并没有使用到太多其他功能,但是 ...
- PCB 加投率计算实现基本原理--K最近邻算法(KNN)
PCB行业中,客户订购5000pcs,在投料时不会直接投5000pcs,因为实际在生产过程不可避免的造成PCB报废, 所以在生产前需计划多投一定比例的板板, 例:订单 量是5000pcs,加投3%,那 ...
- In 7-bit
http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3713 题意:给定一个字符串,首先输出这个字符串的长度(以两位的十六进制的形 ...
- 拼接html 的事件转义
attach += "<div style='line-height: 10px;float: left;margin-left: 10px;' id='attach_" + ...
- Python3安装Scrapy
Microsoft Visual C++ Build Tools 最近项目在写爬虫,项目经理给了个Python Scrapy的爬虫项目,要求使用Java实现相关功能.于是乎在本地先后安装了Pytho ...
- vue-cli的创建、基本配置和遇到的问题总结
vue-cli的创建及基本配置 1. 创建 vue-cli 项目 确保本地安装了最新版本的nodejs环境(会自带npm环境); 全局安装vue-cli,命令:npm i -g vue-cli 创建项 ...