本文档是学习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中定义的变量名,请注意这两个变量名的一致 |