本文档是学习Angular JS 仿拉勾网 WebApp 开发移动端单页应用学习日志
1 了解涉及到的技术
1.1 angular
诞生于2009年,由Misko Hevery 等人创建,后为Google所收购。是一款优秀的前端JS框架,已经被用于Google的多款产品当中。AngularJS有着诸多特性,最为核心的是:MVC、模块化、自动化双向数据绑定、语义化标签、依赖注入等等。
angular主要使用到的概念,module diretive 表达式 service injector 依赖注入 模型 filter 数据绑定 $scope controller view
,对于其中部分进行相关解释。
module
模块 所有的东西必须先放在模块中 才会正常运行 魔法书
directive 指令
召唤魔法
定义:通过HTML标签、属性、样式或注释使Angular编译器居来为指定的DOM元素绑定特定的行为,甚至是改变DOM元素和它的子元素。
内置指令:ng-model,ng-bind,ng-click,ng-class,ng-if,ng-hide,ng-repeat
自定义指令常用属性:template,templateUrl,link,restrict,scope,transclude
service 服务
共有的代码逻辑 攻击魔法
controller 控制器
私有的代码逻辑 辅助魔法
filter 过滤器
对数据进行过滤
view 视图
指令是angular的灵魂 核心
angular webapp 结构图
1.2 bower
twitter 推出的一款包管理工具,基于The Only Real Dev Language的模块化思想,把功能分散到各个模块中,让模块和模块之间存在联系,通过 Bower 来管理模块间的这种联系。包是指一系列有意义的资源的集合,在bower这里,更多体现在json文件,它是这些资源的配置文件,一个完整的包都应该有一个bower.json文件。管理包含获取,下载,安装,更新,查找,注册等等一系列对资源的操作。
1.2.1 基础功能
`注册模块`:每个包需要确定一个唯一的 ID 使得搜索和下载的时候能够正确匹配
`文件存储`:把文件存储在一个有效的网络地址上,使用的时候可以直接下载到
`上传下载`:你可以把你的包注册后上传存储,使用的时候可以使用一条命令直接下载到当前项目
`依赖分析`:它帮我们解决了包与包直接的依赖关系,当我们下载一个`包A`的时候,由于它依赖`包B`,所以`bower`会自动帮我们下载好`包B`
1.2.2 Bower 与 npm 的关系
npm是专门管理node模块的管理工具,而bower是node的模块,因为bower是依赖node,npm和git。正如前面所言,npm是擅长的是管理node模块,而bower管理的范围更大,涉及html,css,js和图片等媒体资源。或许,这也是人们喜欢在服务器端使用npm,而在客户端使用bower。
1.2.3 为什么要使用Bower?
节省时间
为什么要学习Bower的第一个原因,就是它会为你节省寻找客户端的依赖关系的时间。一般安装jQuery的时候,都需要去jQuery网站下载包或使用CDN版本。但是有了Bower,只需要输入一个命令,jquery就会安装在本地计算机上,你 不需要 去记版本号之类的东西,你也可以通过Bower的info命令去查看任意库的信息。脱机工作
Bower会在用户主目录下创建一个.bower的文件夹,这个文件夹会下载所有的资源、并安装一个软件包使它们可以离线使用。如果你熟悉Java,Bower即是一个类似于现在流行的Maven构建系统的.m2仓库。每次你下载任何资源库都将被安装在两个文件夹中 —— 一个在的应用程序文件夹,另一个在用户主目录下的.bower文件夹。因此,下一次你需要这个仓库时,就会用那个用户主目录下.bower中的版本。可以很容易地展现客户端的依赖关系
你可以创建一个名为json的文件,在这个文件里你可以指定所有客户端的依赖关系,任何时候你需要弄清楚你正在使用哪些库,你可以参考这个文件。让升级变得简单
假设某个库的新版本发布了一个重要的安全修补程序,为了安装新版本,你只需要运行一个命令,bower会自动更新所有有关新版本的依赖关系。
1.3 gulp
gulp是前端开发过程中对代码进行构建的工具,是自动化项目的构建利器;不仅能对网站资源进行优化,而且在开发过程中很多重复的任务能够使用正确的工具自动完成;使用她,我们不仅可以很愉快的编写代码,而且大大提高我们的工作效率。
gulp是基于Nodejs的自动任务运行器, 她能自动化地完成 javascript/coffee/sass/less/html/image/css 等文件的的测试、检查、合并、压缩、格式化、浏览器自动刷新、部署文件生成,并监听文件在改动后重复指定的这些步骤。在实现上,她借鉴了Unix操作系统的管道(pipe)思想,前一级的输出,直接变成后一级的输入,使得在操作上非常简单。
gulp 和 grunt 非常类似,但相比于 grunt 的频繁 IO 操作,gulp 的流操作,能更快地更便捷地完成构建工作。
1 | gulp.src() //读取文件和文件夹 |
1.4 less 样式预处理器
LESS将CSS赋予了动态语言的特性,是css预编译处理,如变量,继承,运算,函数。LESS既可以在客户端上运行 (支持IE 6+, Webkit, Firefox),也可以借助Node.js或者Rhino在服务端运行。
本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。
1.4.1 基础使用案例
1 | //这里是一些简单的LESS语法 |
1.4.2 生成的css文件形式
1 | textarea { |
1.5 单页应用
单页应用(SPA)是指在浏览器中运行的应用,它们在使用期间不会重新加载页面。像所有的应用一样,它旨在帮助用户完成任务,比如编写文档或者管理Web服务器。可以认为单页应用是一种从Web服务器加载的富客户端。
说白就是无刷新,整个webapp就一个html文件,里面的各个功能页面是javascript通过hash,或者history api来进行路由,并通过ajax拉取数据来实现响应功能。因为整个webapp就一个html,所以叫单页面。单页应用的页面切换流畅,属于前后端分离的典型。
2 安装相关环境
先安装好node和git bash两个软件,注意安装git bash不要一路点击next,其中有一步是询问git指令是全局安装还是仅能在git shell或者git bash中运行,软件默认是第一个,指令只能在git shell或者git bash中运行,请选择第二个,git指令所有的命令行工具都可以运行。当然如果你本地已经安装过github客户端,那你就不用安装这个软件,直接通过git shell就可以了。
对于node不一定要下载最新的版本,可以下载之前的稳定版本,然后通过node命令指示符全局安装相关环境。
1 | # 已经翻墙 |
将安装指令的文件夹配置到系统环境变量PATH中(计算机-->右键属性-->高级系统设置-->环境变量),我公司电脑系统盘是D盘,这边的默认全局安装路径是D:\Program Files\nodejs\node_global,但是我家中的电脑,系统盘是C盘,全局安装之后的安装路径是C:\Users\Administrator\AppData\Roaming\npm,每次全局安装之后,会提示安装路径,如果该路径你之前已经设置成环境变量就不用管,但是如果提示的安装路径你没有设置过环境变量,你就会发现这个全局安装的指令一直跑不了,还有就是bower指令这个是基于git指令的,如果你的github在安装的时候没有设置全局安装,还需要手动将git指令所在文件夹配置到环境变量中,我就是由于前期安装了github客户端,直接用的git shell,git的声明路径应该是C:\Users\Administrator\AppData\Local\GitHub\PortableGit_f02737a78695063deace08e96d5042710d3e32db\mingw32\bin,就是你本地github安装路径下的bin文件夹,具体地址请根据实际情况配置。
3 开始写项目
3.1 git初始化
如果上一步没有将git指令设置全局可用,那么需要在其他终端进行git初始化,如果没有设置的话,将gitbash添加到右键功能栏,相关教程
,或者将git shell添加到右键功能栏。但是如果已经将git指令设置为所有终端都可以用,那就直接在vscode终端中输入相关指令,新建项目文件夹,并在项目文件夹中执行git初始化。
1 | git init |
执行完成之后,空项目文件夹中应该有以下文件夹
1 | - .git |
3.2 bower初始化
在项目文件夹中右键选择open with code,在vscode中打开当前项目文件,如果没有下载的可以点击链接进行下载Download scode,
请注意一定要先git初始化,再bower初始化,要不然会报错,说当前文件夹找不到git相关文件,在终端中输入bower初始化指令。
1 | bower init |
bowerrc处理
重新配置bower包安装路径,非必要步骤,bower下载的包默认的安装路径是bower_components,如果你看到默认文件夹名字特别不爽,是换一个文件夹放安装包,注意新建.bowerrc文件有一定窍门。
1 | //新建`.bowerrc`路径配置文件,这个必须通过指令新建,`window`默认文件必须有文件名 |
在
.bowerrc文件中配置以下json,设置默认bower的包下载文件夹名称
1 | { |
3.3 bower 安装运行相关包
3.3.1 举个安装的完整栗子
1 | bower install --save angular |
3.3.2 安装依赖包
然后在vscode终端中开始安装其他包
1 | bower install --save requirejs |
3.3.3 卸载依赖包
如果发现包安装错误或者安装多余可以进行包的卸载
1 | bower uninstall --save requirejs #卸载相关包并且修改bower.json,推荐这种卸载 |
3.3.3 复制配置好的bower.json
或者你想偷懒不想通过指令去安装,可以直接把我这边配置好的bower.json的dependencies内容直接拿过去用,然后直接执行bower install就好,其中mdui这个是我个人喜欢的一个样式框架,非必须安装。
1 | "dependencies": { |
3.4 npm安装服务环境相关包
1 | npm install --save-dev gulp gulp-clean gulp-concat gulp-connect gulp-cssmin gulp-imagemin gulp-less gulp-load-plugins gulp-uglify open |
相关说明
| 依赖包名 | 功能 |
|---|---|
| gulp | 必要的运行包,毕竟还要靠gulp干大事 |
| gulp-load-plugins | 协助gulp找到其他gulp子包一起玩的类似脚手架之类的感觉 |
| gulp-clean | 在gulp-load-plugins的召唤下,可以清理相关文件夹 |
| gulp-concat | 在gulp-load-plugins的召唤下,可以整合文件夹下的所有js文件合并成一个文件 |
| gulp-connect | 在gulp-load-plugins的召唤下,可以重新刷新当前页面保证在编辑器中做修改,浏览器自动刷新展示 |
| gulp-cssmin | 在gulp-load-plugins的召唤下,可以压缩生成的css文件,在生产环境下的css文件需要进行压缩 |
| gulp-imagemin | 在gulp-load-plugins的召唤下,可以压缩生成的image文件,在生产环境下的image文件需要进行压缩 |
| gulp-less | 在gulp-load-plugins的召唤下,可以编译less文件生成正常的css文件 |
| gulp-uglify | 在gulp-load-plugins的召唤下,可以压缩生成的js文件,在生产环境下的js文件需要进行压缩 |
| open | 可以打开配置好的对应端口网页 |
配置好的
package.json
最后放上安装好的配置,可以直接把我这边配置好的package.json的devDependencies内容直接拿过去用,然后直接执行npm install就好,或者你使用的是淘宝镜像,执行cnpm install就好。
1 | "devDependencies": { |
3.5 编写相关gulp命令
在当前项目的根目录下新建一个gulpfile.js,请注意文件名一定要正确,并编写相关gulp指令
1 | var gulp =require('gulp');//调用总指令 |
编写完成之后可以直接执行gulp命令就可以直接在生产和开发环境中生成对应文件,并且自动打开对应网页界面,当然,也可以单独执行一下执行,都是可以单独运行。
1 | gulp |
3.6 开始写界面
3.6.1 hello World
在src文件夹下新建index.html,当然也可以是其他名字,但是一般默认的就主页面名字就写index,添加相应的样式文件和js文件,写一个hello World,通过gulp指令,页面就自动打开在眼前,如果页面顺利打开,并且控制台没有任何报错,对应文件下所有文件都是正确生成,那么就继续往下走,如果控制台有报错,请往前看,是否有没有注意的细节。
src/index.html
1 |
|
src/script/app.js
1 | ;//使用严格模式 |
3.6.2 测试相关功能
- 保证控制台没有任何报错
- 在编辑器中修改
src下的网页或者其他文件内容,浏览器中的内容是否正常刷新 - 测试
gulp相关指令是否都可以正常执行 - 保证生产环境和开发环境中的相关js、css和html等都是正常生成,并且生产环境中的文件进行了相应压缩
- 测试
angular是否被正常召唤,一般召唤成功的话,在页面所有标签下都会新增ng-scope样式
3.6.3 了解路由注意事项
1 | '/home':只匹配'/home' |
3.6.4 开始写使用路由的demo
src/index.html网页加入angular-ui-router.min.js文件,这个具体路径看实际开发环境文件夹中的Index页和这js文件的相对路径。src/index.html网页加入index.css文件,加入自定义的样式文件- 编写测试的路由页面,我这边是写了四个路由页面
src/script/app.js,中引用ui.router,告诉angular,可以使用第三方的路由啦。src/script/config/router.js,中编写实际路由相关内容。
3.6.4 路由测试成功,放上所有文件
src/index.html
1 |
|
src/script/app.js
1 | ; |
src/script/config/router.js
1 | //请注意app这个变量是app.js中定义的变量名,请注意这两个变量名的一致 |