基于angularJS和requireJS的前端架构
1、概要描述
1.1、angularJS描述:angularJS是可以用来构建WEB应用的,WEB应用中的一种端对端的完整解决方案。通过开发者呈现一个更高层次的抽象来简化应用的开发。最适合的就是用它来构建一个CRUD应用,它提供了非常方便的且统一高效的解决方案,其数据绑定、基本模版标识符、表单验证、路由、深度链接、组件重用、依赖注入、以及HTML标记等,最受欢迎的莫过于它的双向数据绑定。
1.2、requireJS描述:requireJS是来解决传统的页面加载script标记操作,通过其初始化配置实现按需、并行、延时的载入js库,声明不同js文件之间的依赖关系,它是遵循前端AMD规范(异步模块加载)。js代码可以以模块化的方式进行组织(模块化编程)。模块化的意义就是通过代码逻辑表明模块之间的依赖关系和执行顺序,按照模块逻辑来分解代码,起到配合mvc框架架构项目的作用。
1.3、整合:使用requireJS模块化定义模块质检的依赖关系,打包不需要文件挨个对照,很方便。将script脚本从模版页面中抽离出来,通过js当前模块加载需要依赖的js模块。按需加载。路由更加方便。
2、设计思想
2.1、思想:效仿后端MVC架构的基本思想,采用MVVM模式,脱离传统的前后端耦合度太紧思想,采用前后端分离开发的方式,使其维护成本减少开发效率提高。让前端开发人员只需去关注数据和页面的交互,后端人员只需提供数据。
2.2、Rest:rest指的是一组架构约束条件和原则,满足这些约束条件和原则的应用程序或设计就是RestFul。Rest原则就是客户端和服务器之间的交互在请求之间是无状态的,还有一个重要的原则就是分层系统,表示组件无法了解它与之交互的中间层以外的组件。通过将系统知识限制在单个层,可以限制整个系统的复杂性,促进了底层的独立性。rest是一个轻量级的webservice的架构风格,目的就是为了降低开发的复杂性,提高系统的伸缩性。
2.3、原理:angularJS和requireJS集成、其运行原理步骤如下:
1、初步加载初始页面如index.html,首先加载样式文件,再加载requireJS配置文件和源文件。
2、通过requireJS配置的data-main主函数入口,加载angularJS和应用依赖的js源文件。
3、通过ng.bootstrap(document, ['app'])手动初始化静态页面使其支持angularJS,ng.resumeBootstrap()延迟引导。
4、经index.html页面配置布局指令,加载smart-device-detect、 smart-fast-click、smart-layout、smart-page-title处理页面以及整体规划布局。
5、通过index.html指定的属性ui-view,通过angularJS的ui-router 插件来动态的切换路由。
6、通过主函数入口main.js注册的应用app.js来注册整个应用程序的各个模块,每个模块中定义各自的路由。
7、定义一个全局依赖的模块如includes.js文件,装载全局应用程序用到的服务、指令以及组件。
8、定义相应的拦截机处理http请求的异常统一操作,如是否登陆,是否拥有该操作权限等。
9、由各自定义的路由去加载相应的模版,相应的controller处理数据提供到模版上显示。
3、设计优缺点
3.1、优点
3.1.1、angularJS是一种MVVM前端框架,这样就可以完全脱离于后端程序的耦合度,可以完全脱颖而出,前端和后端可以分开部署,分开开发。
3.1.2、angularJS的模块化解决了代码逻辑的耦合性,通过依赖注入使其耦合性很散,从而可以很方便的拆分组合。
3.1.3、模版功能强大丰富,自带丰富的angular指令,也可以自定义指令。
3.1.4、前端的MVVM框架,包含了模版、数据双向绑定,路由,模块化,服务,过滤器,依赖注入等所有功能,前端处理方便。
3.1.5、模块化,维护性高、灵活架构焦点分离、方便模块间组合,分解,单个模块功能调试,升级。
3.1.6、可测试性,可以进行单元测试。
3.1.7、js/css、图片文件压缩合并,提高用户体验。
3.2、缺点
3.2.1、验证功能错误信息显示比较薄弱。
3.2.2、第三方库一起使用不是很便利,需要手动的包装directive。
3.2.3、不适合于频繁操作DOM。
3.2.4、版本升级兼容性不是很好,高版本未能很好的兼容低版本。
3.2.5、系统分层,调用链增长,模块间通信损耗性能。
4、架构实现
4.1、整体架构说明
该架构采用javascript脚本技术实现,系统架构图如下:
4.2、项目环境搭建
前端完全无需任何依赖工具,一个记事本编辑器即可。需配合后端java开发的 话只需按照java的开发环境建立一个web项目即可,将前端框架搭建好的webapp目录拷贝到web项目的webRoot下面就可以开始开发了。开发完成后采用grunt构建工具打包压缩webapp的js文件。
4.3、技术应用
1、angularJS、整体框架支持者,MVVM模式架构。
2、requireJS、模块化以及按需加载js文件。
3、require-domready、采用回调的方式让页面加载完成后运行requireJS。
4、bootstarp、采用bootstrap样式库。
5、jquery、jquery文件库,操作DOM元素。
6、angular-route、路由控制,通过hash和history两种方式实现。
7、angular-couch-potato、配合ui-router来实现延时按模块加载。
8、angular-animate、实现动画效果的angular插件。
9、angular-sanitize、实现html净化的angular插件。
10、以上为框架的主要源文件,还有大量的插件和组件以及自定义组件等。
4.4、框架搭建步骤
1、新建一个webapp的文件夹,在其下面建好对应的文件夹,如api、app、plugin、styles、vendor和入口地址index.html。
2、准备好angular和require以及所需的插件源文件,存放到vendor目录 下面,最好按功能区分来设置不同的文件夹。通过config.js配置应用依赖的js文件。
3、定义app所需的功能,建立相应的文件夹,如auth、components、dashboard、layout、modules。定义应用的主函数和应用文件,如main.js、app.js以及抽离的配置文件config.js、includes.js文件。
4、开始编写index.html,采用标准的html5规范,导入应用需用的样式文件、定义script脚本加载requireJS文件。
5、定义整体应用的布局,通过angularJS的指令和路由操作。
6、定义requireJS的配置文件,配置整个应用的依赖关系。
7、编写主函数入口文件main.js,加载应用程序,启动angular。
8、编写应用主文件app.js,定义应用的模块,加载模块。配置拦截机。
9、配置应用的全局依赖includes.js。
10、规划整体应用的模块、布局以及相关组件和互相的依赖关系。
11、拦截机验证用户信息,权限信息。
具体目录说明如图:
4.5、模块开发步骤
1、规划模块的设计,定义前后端套接的数据结构。
2、在app的modules目录下面定义一个模块如system,然后到system定义一个module.js,定义模块的路由,启动该模块。
3、定义相应的controller、views、services、directives以及filters。
4、到system模块定义views需要的模版文件。
5、开发system解析模版的controller,后端提供需要的json接口的数据。
6、如需用到自定义指令和数据过滤器到相应的文件夹下面定义开发。在module.js文件的路由中指定其依赖的指令和过滤器。
7、前后端开始数据对接,权限验证。
5、构建和压缩
5.1、Grunt构建工具
5.1.1、简介:Grunt是一个基于任务的JavaScript应用的命令行的自动化的构建工具。它可以用来做压缩、编译、单元测试、代码检查以及打包发布的任务。更智能、更省事,不需重复的进行,特别是大项目中,只需配置好要做的任务即可。
5.1.2、如何构建:Grunt是要配合Node.js一起使用,具体步骤如下:
1、下载nodeJS Server,安装到本地电脑。
2、安装grunt的命令行界面grunt-cli,sudo npm install grunt-cli -g。
3、在应用中建立一个grunt的文件夹,并且配置好一份package.json和Gruntfile文件。
4、安装grunt模块插件,常用模块有:npm install grunt --save-dev
检查js语法 : npm install grunt-contrib-jshint --save-dev
合并文件 : npm install grunt-contrib-concat --save-dev
压缩文件 : npm install grunt-contrib-uglify --save-dev
监控文件 : npm install grunt-contrib-watch --save-dev
删除文件 : npm install grunt-contrib-clean --save-dev
复制文件 : npm install grunt-contril-copy --save-dev
图像压缩 : npm insatll grunt-contril-imagemin --save-dev
压缩合并CSS : npm install grunt-contril-cssmin --save-dev
save-dev :自动将其添加到devDependencies配置段中,遵循tildeversion range格式。
5、到应用工程目录下的grunt目录,运行grunt命令。
6、注意事项
6.1、各模块注入某个服务或某块插件的时候,要注意是否配置了其对应的源文件, 否则会报注入失败。
6.2、angular插件服务的注入名称到各个源文件中可以找到,如源文件中 angular.module(‘xxx’),其中xxx就是服务名称。
基于angularJS和requireJS的前端架构的更多相关文章
- 基于AngularJS的企业软件前端架构[转载]
这篇是我参加QCon北京2014的演讲内容: 提纲: 企业应用在软件行业中占有很大的比重,而这类软件多数现在也都采用B/S的模式开发,在这个日新月异的时代,它们的前端开发技术找到了什么改进点呢? B/ ...
- 基于 Angularjs&Node.js 云编辑器架构设计及开发实践
基于 Angularjs&Node.js 云编辑器架构设计及开发实践 一.产品背景 二.总体架构 1. 前端架构 a.前端层次 b.核心基础模块设计 c.业务模块设计 2. Node.js端设 ...
- 基于AngularJS的个推前端云组件探秘
基于AngularJS的个推前端云组件探秘 AngularJS是google设计和开发的一套前端开发框架,帮助开发人员简化前端开发的负担.AngularJS将帮助标准化的开发web应用结构并且提供了针 ...
- 基于React的PC网站前端架构分析
代码地址如下:http://www.demodashi.com/demo/12252.html 本文适合对象 有过一定开发经验的初级前端工程师: 有过完整项目的开发经验,不论大小: 对node有所了解 ...
- 用“MEAN”技术栈开发web应用(一)AngularJs前端架构
前言 不知何时突然冒出“MEAN技术栈”这个新词,听起来很牛逼的样子,其实就是我们已经熟悉了的近两年在前端比较流行的技术,mongodb.express.angularjs.nodejs,由于这几项技 ...
- 在基于AngularJs架构的ABP项目中使用UEditor
[前提须知] 读过此篇博客 了解angular-ueditor 了解ABP如何使用 会使用VS2017 [1.下载ABP模板] https://aspnetboilerplate.com/Templa ...
- 基于Vue2.x的前端架构,我们是这么做的
通过Vue CLI可以方便的创建一个Vue项目,但是对于实际项目来说还是不够的,所以一般都会根据业务的情况来在其基础上添加一些共性能力,减少创建新项目时的一些重复操作,本着学习和分享的目的,本文会介绍 ...
- Turtle Online:致力于打造超接地气的PC前端架构,组件+API,快速搭建前端开发
架构创作初衷 每当新开一个项目时,都会绞尽脑汁去考虑采用哪种框架:requirejs/seajs.jquery/zepto.backbone.easeUI/Bootstrap/AngularJS……, ...
- 基于angularJS搭建的管理系统
前言 angularJS搭建的系统,是一年前用的技术栈,有些地方比较过时,这里只是介绍实现思路 前端架构 工程目录 项目浅析 项目依赖包配置package.json { "name" ...
随机推荐
- POJ 3114 Countries in War(强连通+最短路)
POJ 3114 Countries in War 题目链接 题意:给定一个有向图.强连通分支内传送不须要花费,其它有一定花费.每次询问两点的最小花费 思路:强连通缩点后求最短路就可以 代码: #in ...
- LR选择哪种方式录制
LR选择哪种方式录制,有以下考虑原则: 1.基于浏览器的应用程序推荐使用HTML-basic script方式录制 2.不是基于浏览器的应用程序推荐使用URL-basic script方式录制 3.如 ...
- 5. openCV中常用函数学习
一.前言 经过两个星期的努力,一边学习,一边写代码,初步完成了毕业论文系统的界面和一些基本功能,主要包括:1 数据的读写和显示,及相关的基本操作(放大.缩小和移动):2 样本数据的选择:3 数据归一化 ...
- SQL语句中的DQL、DML、DCL、DDL、CCL、TPL
结构化查询语言(Structured Query Language)简称SQL,是一种特殊目的的编程语言,是一种数据库查询和程序设计语言,用于存取数据以及查询.更新和管理关系数据库系统:同时也是数据库 ...
- NET基础课--Linq第三讲
LINQ 1.查询操作符 (1)源起 .net的设计者在IEnumerable<T>等接口基础之上定义了一系列的扩展方法来方便用户操作集合对象,这些扩展方法构成了LINQ的查询操作符 (2 ...
- System.AccessViolationException: 尝试读取或写入受保护的内存 解决办法
netsh winsock reset --运行此命令解决 错误描述: 之前装的vs2010后 再又安装了vs2013 ,运行之前的vs2010项目 就出现以上错误 错误应用程序名称: w3wp. ...
- Oracle - 使用序列+触发器实现主键自增长
Oracle中的自增,不如Sql server那般方便. --.创建序列 CREATE SEQUENCE "TABLE_NAME"."SQ_NAME" MINV ...
- js中的eval方法转换对象时,为何一定要加上括号?
待转换的是一个Json字符串: {'name':'新欢'} 而使用如下这种方式调用则会抛出语法异常, eval("{'name':'新欢'}"); 必须加上括号才行 eval(&q ...
- IOS UI篇—UILabel的文字顶部对齐
UILabel的文字顶部对齐 NOV 20TH, 2011 默认UILabel是垂直居中对齐的,如果你的UILabel高度有多行,当内容少的时候,会自动垂直居中. 如下图所示(图片来自stackove ...
- shell启动时读取的配置文件
bash shell具体可以分为3种类型,这3种类型为: 1 login shell 就是需要输入用户名和密码才能登陆的shell 2 可交互的非login shell 就是不用登陆的,但是可以同用户 ...