基于Vue2.0的单页面开发方案
2016的最后一天,多多少少都应该总结一下这一年的得失,哪里做的好,哪里需要改进,记一笔,或许将来会用到呢。
毕业差不多半年了,一直是一个人在负责公司项目的前端开发与维护,当时公司希望前后端分离,提高前端的开发效率和后期维护的便捷,所以自己在经过一番调查后,决定采用SPA的模式,其主要原因还是阿里中途岛的那样的东西,我们没办法搞出来。
项目不需要兼容IE8及以下的浏览器,所以在选型的时候果断选了Vue.js那一套的东西,因为react之前也有了解过,上手的确没Vue来的快。
除去旧项目的维护时间,使用vue也有三个多月了,写一写这段时间来的使用心得吧
1. 如何划分组件和模块
组件化开发已经是谈了很久的东西了,在没有实战经验之前,看看民工大哥还有一些其他前辈写的博客,感觉这东西真的好牛叉,太好用了,但真当动手开始做的时候才会发现,其实并没有想象的那么简单和美好。具体的问题可以参考这篇文章Vue.js实践。
在组件的划分上,我把比较笼统的组件(components)分成了部件(widgets)和模块(modules)两个部分,部件主要是一些功能型的东西,而模块则是通过UI样式去定义。
我们从源头分析一下,一个网站是通过很多页面组成的,而每个页面有包含了不同的块,每个块则是通过不同的元素构成,这些元素我们可以把它想象成部件,也就是页面的最小构成单位。
但是在实际的开发当中,我并没有把所有元素都写成部件,而是一些功能型并且会重复使用的元素,才会写成部件,比如下拉框、切换开关等
而对于模块,则是包含了多个元素,里面也可能会存在部件,比如:
不管是部件还是模块,其目的都是为了复用,都可以统称为组件,之所以要这样划分成两个类别,是为了层次更加清晰,职责单一明确,更容易管理与维护。
当然,并不是所有UI样子差不多或者一样的地方都会把它写成组件,比如:
这两个导航,样式都一样的,但是用一个通用的样式或许会比写一个组件更加方便,这样就能减少一个组件的数据处理了。
2.组件样式
以前最头疼的就是class命名了,不过很庆幸的是Vue以自己的方式实现了shadow DOM。利用shadow DOM,使用BEM的命名方式,再配合单一职责的样式划分,再也不用担心class如何命名了。
使用BEM规范的命名方式的好处我这里不多说,大家可以自己百度,但是缺点就是class名往往可能会出现好长一串,这时利用shadow DOM可以很好的解决这个问题。
所有的模块里面所包含的元素无非也就那些:header、navicat、title、list、item、text......在开发的时候我写了一个规范,BEM三个部分分别都由哪些来构成,基本能满足所有的模块,几遍模块里有乱七八糟的一堆元素。后面会贴上命名规范。
使用单一职责的样式主要是为了解决组件组合拼凑的问题,在实际开发中,几遍看上去功能一样,UI也基本相同的地方,但是UI设计人员也可能会做出一些让人很郁闷的图,使得组件的呈现和布局样式不同,更别说是用在功能内容都不一样的地方了。
这个时候为了更好、更简单清晰的实现布局,变会使用一些单一职责的样式,比如:
就像这三张图,明明就同一个东西,非要搞差异化,如果这些都写在一个组件里,并不是不行,但是却很麻烦,但是如果我们组件写好一个基础的样式,另外的直接通过添加单一职责样式的class名,这样就方便多了。当然最好还是和UI同学商量,保持UI的一致性原则,不要为了自以为的好看,闭着眼睛乱画图。
当然,在同一个组件里的样式肯定还是需要通过prop之类的操作,但是在外部的布局和展现方面,我们可以在引用组件的时候,直接添上需要的class名就行了,这里不展示具体代码了。
3.工程结构
直接上图吧,实在不想写了,着急回家啊。
assets文件夹里的less文件夹放的就是一些单一功能的样式,比如layout.less文件里:
/* 上外边距 */
.mt30 { margin-top: 30px; }
.mt60 { margin-top: 60px; } /* 右外边距 */
.mr30 { margin-right: 30px; }
.mr70 { margin-right: 70px; }
.mr90 { margin-right: 90px; } /* 底外边距 */
.mb20 { margin-bottom: 20px; } /* 左外边距 */
.ml30 { margin-left: 30px; }
.ml40 { margin-left: 40px; }
.ml70 { margin-left: 70px; }
components文件夹里的就更清楚了,widgets放一些公用的小部件,modules里放公共模块,而pages里就是各个页面了。
规范明后天再来贴。。。先回家了,实在坐不住了
基于Vue2.0的单页面开发方案的更多相关文章
- 基于vue2.0的分页组件开发
今天安排的任务是写基于vue2.0的分页组件,好吧,我一开始是觉得超级简单的,但是越写越写不出来,写的最后乱七八糟的都不知道下句该写什么了,所以重新捋了思路,小结一下- 首先写组件需要考虑: 要从父组 ...
- 饿了么基于Vue2.0的通用组件开发之路(分享会记录)
Element:一套通用组件库的开发之路 Element 是由饿了么UED设计.饿了么大前端开发的一套基于 Vue 2.0 的桌面端组件库.今天我们要分享的就是开发 Element 的一些心得. 官网 ...
- 基于vue2.0打造移动商城页面实践 vue实现商城购物车功能 基于Vue、Vuex、Vue-router实现的购物商城(原生切换动画)效果
基于vue2.0打造移动商城页面实践 地址:https://www.jianshu.com/p/2129bc4d40e9 vue实现商城购物车功能 地址:http://www.jb51.net/art ...
- 基于vue2.0前端组件库element中 el-form表单 自定义验证填坑
eleme写的基于vue2.0的前端组件库: http://element.eleme.io 我在平时使用过程中,遇到的问题. 自定义表单验证出坑: 1: validate/resetFields 未 ...
- vue-swiper 基于Vue2.0开发 轻量、高性能轮播插件
vue-swiper 基于 Vue2.0 开发,基本满足大部分功能 轻量.高性能轮播插件.目前支持 无缝衔接自动轮播.无限轮播.手势轮播 没有引入第三方库,原生 js 封装,打包之后只有 8.2KB ...
- 干货分享:vue2.0做移动端开发用到的相关插件和经验总结(2)
最近一直在做移动端微信公众号项目的开发,也是我首次用vue来开发移动端项目,前期积累的移动端开发经验较少.经过这个项目的锻炼,加深了对vue相关知识点的理解和运用,同时,在项目中所涉及到的微信api( ...
- 优化单页面开发环境:webpack与react的运行时打包与热更新
前面两篇文章介绍初步搭建单页面应用的开发环境: 第一篇:使用webpack.babel.react.antdesign配置单页面应用开发环境 第二篇:使用react-router实现单页面应用路由 这 ...
- 基于vue2.0的一个豆瓣电影App
1.搭建项目框架 使用vue-cli 没安装的需要先安装 npm intall -g vue-cli 使用vue-cli生成项目框架 vue init webpack-simple vue-movie ...
- vue2.0 构建单页应用最佳实战
vue2.0 构建单页应用最佳实战 前言 我们将会选择使用一些 vue 周边的库vue-cli, vue-router,vue-resource,vuex 1.使用 vue-cli 创建项目2.使 ...
随机推荐
- In-Memory:内存优化表的事务处理
内存优化表(Memory-Optimized Table,简称MOT)使用乐观策略(optimistic approach)实现事务的并发控制,在读取MOT时,使用多行版本化(Multi-Row ve ...
- 理解Maven中的SNAPSHOT版本和正式版本
Maven中建立的依赖管理方式基本已成为Java语言依赖管理的事实标准,Maven的替代者Gradle也基本沿用了Maven的依赖管理机制.在Maven依赖管理中,唯一标识一个依赖项是由该依赖项的三个 ...
- 有朋友问了数据库ID不连续,怎么获取上一篇和下一篇的文章?(不是所有情况都适用)
呃 (⊙o⊙)…,逆天好久没写SQL了,EF用的时间长了,SQL都不怎么熟悉了......[SQL水平比较菜,大牛勿喷] 方法很多种,说个最常见的处理 因为id是自增长的,所以一般情况下下一篇文章的I ...
- ASP.NET Core应用针对静态文件请求的处理[1]: 以Web的形式发布静态文件
虽然ASP.NET Core是一款"动态"的Web服务端框架,但是在很多情况下都需要处理针对静态文件的请求,最为常见的就是这对JavaScript脚本文件.CSS样式文件和图片文件 ...
- zookeeper源码分析之三客户端发送请求流程
znode 可以被监控,包括这个目录节点中存储的数据的修改,子节点目录的变化等,一旦变化可以通知设置监控的客户端,这个功能是zookeeper对于应用最重要的特性,通过这个特性可以实现的功能包括配置的 ...
- C++随笔:.NET CoreCLR之corleCLR核心探索之coreconsole(1)
一看这个标题,是不去取名有点绕呢?或者是,还有些问题?报告LZ...你的标题取得有问题,是个病句!↖(^ω^)↗!!!先不要急,其实我今天带给大家的就是CoreCLR中的coreclr.其中它是在名字 ...
- js闭包 和 prototype
function test(){ var p=200; function q(){ return p++; } return q; } var s = test(); alert(s()); aler ...
- Android 开发一定要看的15个实战项目
前言: 虽说网上有太多的Android课程,但是大多都是视频,有Android在线开发环境的几乎没有,但是对于学习Android的人来说拥有在线的Android开发环境是非常好的,可以随时动手操作学习 ...
- C 盘的不速之客
C 盘的报告内容既然上GB的空间 操作系统版本 原来是微软这个查找解决异常关闭解决方案生成的报告 参考 How To Disable Vista Error Reporting Feature ...
- Android快乐贪吃蛇游戏实战项目开发教程-01项目概述与目录
一.项目简介 贪吃蛇是一个很经典的游戏,也很适合用来学习.本教程将和大家一起做一个Android版的贪吃蛇游戏. 我已经将做好的案例上传到了应用宝,无病毒.无广告,大家可以放心下载下来把玩一下.应用宝 ...