AngularJS学习手册
看书和视频结合是学习的最高效方式,看了这本书之后对angularjs才算是有一定的理解了。这本书以搭建一个博客为线索讲解了angularjs的知识点和实际项目开发流程。非常适合初学者!下面是我的读书笔记。
一、传统与AngularJS开发模式对比
传统的web框架如Apache Struts、SpringMVC等mvc框架是主流。web mvc框架完全在服务器运行,所有功能,比如说访问数据库、业务逻辑、显示逻辑和UI活动都在服务器中完成,因此要消耗服务器的内存和资源。
传统web框架通常会是在服务器端使用PHP、ASP、JSP等脚本渲染页面,但是这样会带来很多维护方面的问题。不过这不是传统方式最严重的问题,最严重的问题是传统web框架在移动设备中大都运行缓慢,而与桌面用户相比,移动设备的用户更加不能忍受系统延迟和加载缓慢。因为所有的视图、模型、控制数据库都在后端,而用户的硬件只起到了展示网页的功能。
AngularJS是在移动设备高速普及的情况下,顺应未来趋势而生的客户端js框架,它比起传统的方式,整个Angularjs都运行在用户的硬件中,而后端使用REST web服务处理业务逻辑,REST可以运行在任何地方,也可以使用任何编程语言编写,流行使用JAVA的spring框架或者node.js平台下的Expressjs开发。Angular充分利用了用户的硬件,完全解放了服务器,或者只让服务器处理业务逻辑和数据存储。能够让应用在任何设备下都能良好运行。
二、Angularjs的控制器
1、创建控制器
下面我创建了一个名为myApp的模块,并且为这个模块加上一个名为myAppctrl的控制器
var myApp = angular.module('myApp',[]);
//在angular对象上调用module方法创建了一个名为myApp的模块。
myApp.controller('myAppctrl', ['$scope','$checkCreds','$location','$http',
//在刚刚创建的myApp的模块上又调用了controller方法,定义此控制器的名字为
//myAppctrl。并且[]为这个控制器的依赖,在angular中这称为依赖注入
function (){
//回调函数
}]);
2、控制器的作用
控制器有两个职责,第一个是初始化作用域中的模型属性。创建控制器并将其附加到DOM中之后,会创建一个子作用域,子作用域中保存着一个所属控制器专用的模型。子作用域可以通过$scope对象获取。
我在控制器myAppctrl上添加了两个属性到作用域中name和number
var myApp = angular.module('myApp',[]);
//在angular对象上调用module方法创建了一个名为myApp的模块。
myApp.controller('myAppctrl', ['$scope','$checkCreds','$location','$http',
//在刚刚创建的myApp的模块上又调用了controller方法,定义此控制器的名字为
//myAppctrl。并且[]为这个控制器的依赖,在angular中这称为依赖注入
function myAppctrl($scope){
//回调函数
$scope.name = "lq";
$scope.number = "123";
}]);
接下来就可以在视图模板中访问刚刚添加的两个模型属性,访问方法为双花括号
<div><b>name:</b>{{name}}</div>
<div><b>name:</b>{{number}}</div>
控制器的第二个作用是把行为附加到$scope对象上。附加行为的方式是,在$scope对象上添加方法,在$scope对象上添加了一个changeName的方法
$scope.changeName = function(){
$scope.name = $scope.cName;
$scope.number = $scope.cNumber;
}
那我们在视图模板中怎么使用这个方法呢?
我们使用ng-model="cName",ng-model="cNumber"向模型中添加两个新属性,然后使用ng-click="changeName();"调用刚刚添加到changeName方法。
<form>
<div>
<input type="text" ng-model="cName" required/>
</div>
<div>
<input type="number" ng-model="cNumber" required/>
</div> <div><button ng-click="changeName();">change Name</button></div>
</form>
三、Angular视图
视图由html代码构成,外加一些指令。它是在运行时动态构建视图,合并多个模板,渲染通过$scope对象传入模板的属性。渲染视图的结果是纯样的html绑定在ng-view指令上。ng-repeat是十分常用的表现方式,它相当于是一个for循环,比如说你在控制器中的$scope对象上添加了一个存储数据的json对象list,就可以采用ng-repeat指令来循环这个json对象并把它展现出来。
四、Angular模型
Angular模型保存在$scope对象中,$scope用于访问某个控制器对应的模型。$rootScope是父级作用域,用于保存和访问在多个控制器中使用的模型属性。不过不建议使用$rootScope对象,一个应用中只有一个$rootScope对象,$scope对象是$rootScope对象的子作用域。在开发中我们只要在作用域定义好模型属性,这些属性就可以在视图中访问了,而不需修改视图。
五、Angular的REST服务
rest服务(REpresentational state transfer)表现层状态转化服务的目的是“分离关注点”它是无状态的。REST不能在会话中保存数据。REST服务所需的任何信息都应该放在客户端传给服务的请求和首部中。任何状态都应该保存在客户端,而不能保存在服务器,在Angular中保存状态的方式很多,例如本地存储、cookie或缓存。只有满足以下条件的web服务才称得是REST式服务:
1、能通过URL访问
2、使用某种互联网媒介类型如json交换数据
3、使用标准的HTTP请求方法get post put delete
angularjs通过ajax请求异步调用rest服务,这种ajax请求基于$q服务的Promise对象和deferred对象实现。在angular中创建并注册服务有三种方式
1、使用service函数。 2、使用provider函数 3、使用factory函数(最常用)
angularjs与rest服务通信的方式:
1、$http服务,这个服务通过浏览器的XMLHttpRequest对象实现与rest服务的低层交互 2、$resource对象 这个对象提供与rest服务交互的高层方式,极大简化了通信过程。
下面我定义了一个与rest服务交互的angularjs服务
var blogServices=angular.module('services',['ngResource']);
blogServices.factory('BlogPost', ['$resource', function($resource){
return
$resource(url, paramDefaults, actions)
}])
六、服务和业务逻辑
不是所有业务逻辑都在rest服务中,这些业务逻辑通常要在多个控制器中使用,这个时候非rest服务就有用了。比如:
1、认证用户,由于rest服务不能保存状态,而且在服务器的会话中保存用户的认证凭证有安全隐患,所以这时使用angularjs服务最好。
七、Angularjs指令
从用户的角度,指令directive就是在应用的模板中使用的自定义html标签。angularjs的html编译器会解析指令,增强模板的功能。而这个编译器不是正在意义的编译而是搜索DOM树,找出与指令关联的html元素,找到所关联的元素后,编译器会构建模板,把事件附加到模板中的这些元素上。当然我们也可以自定义指令。
AngularJS学习手册的更多相关文章
- angularJS学习手册(1)
欢迎来到augularJS的学习 一.什么是angularJS? angular的英文意思是角,为什么要叫angular我也不知道. AngularJS是一个MV*(Model-View-Whatev ...
- Redis学习手册(目录)
为什么自己当初要选择Redis作为数据存储解决方案中的一员呢?现在能想到的原因主要有三.其一,Redis不仅性能高效,而且完全免费.其二,是基于C/C++开发的服务器,这里应该有一定的感情因素吧.最后 ...
- Angularjs学习---官方phonecat实例学习angularjs step0 step1
接下来一系列的文章都是学习https://docs.angularjs.org/tutorial的笔记,主要学习的angular-phonecat项目的实现,来介绍angularjs的使用. 1.下载 ...
- AngularJS 参考手册
AngularJS 参考手册 AngularJS 指令 本教程用到的 AngularJS 指令 : 指令 描述 ng-app 定义应用程序的根元素. ng-bind 绑定 HTML 元素到应用程序数据 ...
- angularJS学习资源最全汇总
基础 官方: http://docs.angularjs.org angularjs官方网站已被墙,可看 http://www.ngnice.com/: 官方zip下载包 https://github ...
- git学习手册
#git学习手册 git: Git是一个开源的分布式版本控制系统,可以有效.高速的处理从很小到非常大的项目版本管理.[2] Git 是 Linus Torvalds 为了帮助管理 Linux内核开发而 ...
- 我的AngularJS 学习之旅
我的AngularJS 学习之旅 基础篇 1.Angular的 起源 2.比较Web 页面实现的几种方式 3.一些基本术语 4.Angular与其他框架的兼容性 5.总结 6.综合实例 很早之前就 ...
- C#学习手册
考研学子为何放弃考研?C++开发ArcGis为何无疾而终?C#为何又成为新宠?这一切得一切是人性的扭曲还是道德的败坏,敬请收看接下来的C#学习手册.ps:一天一更.拖更打死.
- SQL语句学习手册实例版
SQL语句学习手册实例版 表操作 例1 对于表的教学管理数据库中的表 STUDENTS ,可以定义如下: CREATE TABLE STUDENTS (SNO NUMERIC (6, ...
随机推荐
- hdu 5363 Key Set
http://acm.hdu.edu.cn/showproblem.php?pid=5363 Key Set Time Limit: 2000/1000 MS (Java/Others) Mem ...
- [iOS UI进阶 - 3.0] 触摸事件的基本处理
A.需要掌握和练习的 1.介绍事件类型2.通过按钮的事件处理引出view的事件处理3.响应者对象 --> UIResponder --> UIView4.view的拖拽* 实现触摸方法,打 ...
- ALT(预警)
1. Alert简介 Alert是一种Oracle系统中的一种机制,它可以监视系统数据库,在规定的情况下给规定用户一个通知,通知可以是邮件或者其他形式,在标注的系统和客户化系统中都是可以定义使用的 2 ...
- java中关于类的封装与继承,this、super关键字的使用
原创作品,可以转载,但是请标注出处地址http://www.cnblogs.com/V1haoge/p/5454849.html. this关键字: this代表当前对象,它有以下几种用途: 1.本类 ...
- SqlServer更新视图存储过程函数脚本
--视图.存储过程.函数名称 DECLARE @NAME NVARCHAR(255); --局部游标 DECLARE @CUR CURSOR --自动修改未上状态为旷课 SET @CUR=CURSOR ...
- CSS 布局总结——变宽度布局
变宽度布局 1-2-1 等比例变宽 总宽度设置 width: 85%; min-width: 650px; (关于IE6的min-width支持,可用) content 设置 width: 66%; ...
- Windbg命令
(1)!runaway命令显示每个线程消费的时间 参考:http://blog.csdn.net/hgy413/article/details/7564252 (2)!wow64exts.sw 关闭6 ...
- 不用submit 同样实现button 点击enter键进行提交
$(function(){ document.onkeydown = function (e) { var theEvent = window.event || e; var code = theEv ...
- delphi 2010 资源文件使用
Project Recources... //1提取出资源 procedure TForm1.Button1Click(Sender: TObject);begin w ...
- Android传感器编程带实例
看了程序人生 网站的 编程高手的编程感悟 深有感触,好像也是一个android 程序员写的,推荐大家也看看.话不多说,还是言归正传吧. 一.前言 我很喜欢电脑,可是笔记本还是太大,笔记本电脑再小还是要 ...