vue项目小结

1.项目打包的时候,遇到如下报错

image.png

问题原因
optimize-css-assets-webpack-plugin 这个版本很高,在4.0以上
但是webpack的版本在4.0以下,
而optimize-css-assets-webpack-plugin的v4.0.0需要webpack v4。

解决方法
降低 optimize-css-assets-webpack-plugin 的版本

npm instal --save-dev optimize-css-assets-webpack-plugin@3.2.0

2.在v-for循环中,需要对每条数据中的值进行处理

<li v-for="item in dataList">
 <image src="imgUrl(item.url)"/>
</li>

imgUrl(data){
if(data){
return 'http://'+data
}else{
return  data
}
}

3.vue中导出组件

export { default as AppMain } from './AppMain'
export { default as Navbar } from './Navbar'
export { default as Settings } from './Settings'
export { default as Sidebar } from './Sidebar/index.vue'
export { default as TagsView } from './TagsView/index.vue'

在使用的页面直接 import {AppMain,Settings } from ”@/components“

4.一些好用的插件

screenfull 全屏插件 npm install --save screenfull
showdown 可以编译markdown语法
tui-editor 富文本编辑器 npm install --save tui-editor
npm run preview -- --report

Vue Baidu Map Vue Baidu Map是基于Vue 2.x的百度地图组件。

中文文档 | github地址 | 在线预览

image.png

Cube-UI手机端UI框架

滴滴 WebApp 团队 实现的 基于 Vue.js 实现的精致移动端组件库
中文文档 | github地址 | 在线预览
组件样式丰富,里面还有表单验证,这是我看到它的优点之一,因为大部分的ui框架在表达验证这块,要么就很简略,而且大部么都压根没有表单验证的

v-charts基于 Vue2.0 和 echarts 封装的 v-charts 图表组件,只需要统一提供一种对前后端都友好的数据格式设置简单的配置项,便可轻松生成常见的图表

中文文档 | github地址 | 在线预览

image.png

5.当组件第二次进入的时候,不会触发created,mounted

创建编辑的页面使用的是同一个 component,默认情况下这两个页面切换时并不会触发 vue 的 created 或者 mounted 钩子,官方说你可以通过 watch $route 的变化来进行处理,但说真的还是蛮麻烦的。后来发现其实可以简单的在 router-view 上加上一个唯一的 key,来保证路由切换时都会重新渲染触发钩子了。这样简单的多了。

<router-view :key="key"></router-view>

computed: {
  key() {
    // 只要保证 key 唯一性就可以了,保证不同页面的 key 不相同
    return this.$route.fullPath
  }
 }

6.媒体查询media query

``用media query做了一点简单的响应式布局``

手机等小屏幕手持设备
@media only screen and (min-width: 320px) and (max-width: 768px) {
    css...
    当设备宽度  在  320px和768px之间时,执行当前的css
}

平板
@media not screen and (min-width: 769px) and (max-width: 992px) {
    css...
    当设备宽度  不在  769px和992px范围内,执行当前的css
}
pc客户端、桌面
@media only screen and (min-width: 993px) and (max-width: 1200px) {
    css...
    当设备宽度  在  769px和992px范围内,执行当前的css
}
大屏设备
@media only screen and (min-width: 1200px) {
    css...
    当设备宽度  大于  1200px时,执行当前的css
}
image.png

7.路由常见配置(须知)

//当设置 true 的时候该路由不会再侧边栏出现 如401,login等页面,或者如一些编辑页面/edit/1
hidden: true // (默认 false)

//当设置 noRedirect 的时候该路由在面包屑导航中不可被点击
redirect: 'noRedirect'

//当你一个路由下面的 children 声明的路由大于1个时,自动会变成嵌套的模式--如组件页面
//只有一个时,会将那个子路由当做根路由显示在侧边栏--如引导页面
//若你想不管路由下面的 children 声明的个数都显示你的根路由
//你可以设置 alwaysShow: true,这样它就会忽略之前定义的规则,一直显示根路由
alwaysShow: true

name: 'router-name' //设定路由的名字,一定要填写不然使用<keep-alive>时会出现各种问题
meta: {
  roles: ['admin', 'editor'] //设置该路由进入的权限,支持多个权限叠加
  title: 'title' //设置该路由在侧边栏和面包屑中展示的名字
  icon: 'svg-name' //设置该路由的图标
  noCache: true //如果设置为true,则不会被 <keep-alive> 缓存(默认 false)
  breadcrumb: false // 如果设置为false,则不会在breadcrumb面包屑中显示
}

如下图例子:

{
  path: '/permission',
  component: Layout,
  redirect: '/permission/index', //重定向地址,在面包屑中点击会重定向去的地址
  hidden: true, // 不在侧边栏线上
  alwaysShow: true, //一直显示根路由
  meta: { roles: ['admin','editor'] }, //你可以在根路由设置权限,这样它下面所以的子路由都继承了这个权限
  children: [{
    path: 'index',
    component: ()=>import('permission/index'),
    name: 'permission',
    meta: {
      title: 'permission',
      icon: 'lock', //图标
      role: ['admin','editor'], //或者你可以给每一个子路由设置自己的权限
      noCache: true // 不会被 <keep-alive> 缓存
    }
  }]
}

8.去掉vue项目中的#

browserHistory : 似我们通常的页面访问路径,并没有 #,但要通过服务端的配置,能够访问指定的 url 都定向到当前页面,从而能够进行前端的路由管理
hashHistory: 以 # 后面的路径进行处理,通过 HTML 5 History 进行前端路由管理

1.配置vue页面

default new Router({
  mode: 'history', 
})

2.在nginx中配置

location / {
  try_files $uri $uri/ /index.html;
}
image.png

或者在Apatch配置

IfModule mod_rewrite.c>
  RewriteEngine On
  RewriteBase /
  RewriteRule ^index\.html$ - [L]
  RewriteCond %{REQUEST_FILENAME} !-f
  RewriteCond %{REQUEST_FILENAME} !-d
  RewriteRule . /index.html [L]
</IfModule>

8.跨域问题解决方法

1.cors

我最推荐的也是我工作中在使用的方式就是: cors 全称为 Cross Origin Resource Sharing(跨域资源共享)。
这种方案对于前端来说没有什么工作量,和正常发送请求写法上没有任何区别,工作量基本都在后端这里。
每一次请求,浏览器必须先以 OPTIONS 请求方式发送一个预请求(也不是所有请求都会发送 options,展开介绍 点我),通过预检请求从而获知服务器端对跨源请求支持的 HTTP 方法。在确认服务器允许该跨源请求的情况下,再以实际的 HTTP 请求方法发送那个真正的请求。推荐的原因是:只要第一次配好了,之后不管有多少接口和项目复用就可以了,一劳永逸的解决了跨域问题,而且不管是开发环境还是正式环境都能方便的使用

2.nginx

      upstream local{
          server www.lh.com:2000;
      }

       location /apis {
          proxy_set_header Host $host;
          proxy_set_header   x-forwarded-for  $remote_addr;
          proxy_set_header   X-Real-IP        $remote_addr;
          rewrite  ^.+apis/?(.*)$ /$1 break;  //这个路径重写,千万别忘了
          include  uwsgi_params;
          proxy_pass http://local;
       }

9.解决vue项目打包后部署在二级目录,导致静态资源相对引用路径错误问题

比如 :项目根目录为http://meeting.333job.com
根目录下有两个文件夹
一个test(测试环境)夹:http://meeting.333job.com/test
一个prod(正式环境)文件:http://meeting.333job.com/prod
我的根据不同环境打包之后,分别丢进对应的文件夹

一般情况下,我们npm run build打包,生成的静态资源文件,引入路径,如下图1所示

图1

打包后的资源使用了绝对根目录路径,因此将项目部署到特定目录比如test文件夹下,其引入的资源路径将无法被正确解析
图2

解决方法

按照如图所示,配置build文件夹下面的webpack.base.conf.js


图3

打包测试环境,dist文件中引入静态资源路径也会发生改变


图3

我们运行测试环境的项目,加载的资源路径也会变成相应的路径


图4

10.前端设置withCredentials导致出现跨域报错

image.png
image.png

11.单独修改某个页面的全局样式

mounted(){
  document.querySelector('.ant-layout-content').setAttribute('style', 'padding-top:0')
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,039评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,426评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,417评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,868评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,892评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,692评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,416评论 3 419
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,326评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,782评论 1 316
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,957评论 3 337
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,102评论 1 350
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,790评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,442评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,996评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,113评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,332评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,044评论 2 355

推荐阅读更多精彩内容

  • ## 框架和库的区别?> 框架(framework):一套完整的软件设计架构和**解决方案**。> > 库(lib...
    Rui_bdad阅读 2,911评论 1 4
  • 响应式布局的理解 响应式开发目的是一套代码可以在多种终端运行,适应不同屏幕的大小,其原理是运用媒体查询,在不同屏幕...
    懒猫_6500阅读 789评论 0 0
  • vue-cli搭建项目 确保安装了node与npm 再目标文件夹下打开终端 执行cnpm i vue-cli -g...
    Akiko_秋子阅读 3,240评论 1 22
  • 写在开头 先说说为什么要写这篇文章, 最初的原因是组里的小朋友们看了webpack文档后, 表情都是这样的: (摘...
    Lefter阅读 5,292评论 4 31
  • 偶然得一佳句,深觉有理深刻,不禁感慨一二: 以前以为坚持就是永不动摇,现在才明白,坚持犹豫着退缩着...
    苏苏大哈阅读 2,382评论 2 4