对angular.js的一点理解

最近一直在学习angular.js。不得不说和jquery相比有很大不同,有很多的不同点,之前也用过Knockout.js 但是两者还是有一定的区别的,首先knockout.js是基于Mvvm的,是几乎纯粹的dom 绑定没有一个架构一样的东西。而angular.js 则有dom 绑定还有mvc 架构的支持。
一 angular.js 和以前的js 框架有的区别:
    1 传统的前端开发思维:
       以jquery 为例,它是以dom 为中心的,是dom 元素的操作,更多的是关注dom 的变化和用户的操作。
    2 新一代的前端开发思维
       以angular.js 为例,它是以data 为中心的,关心的是数据的变化。
   比如如果要实现一个三级联动的下拉框:


jquery 的实现是:

1 分别监听省市县的下拉框的change 事件。
2 在事件中,根据当前的值来实现下级的联动。
3 查询符合上级的下级数据。
4 如此循环 更新下级的下级。
代码量估计得有一百行左右吧。

angular.js 的实现是:

1 定义上级的数据源和model。
2 定义下级的数据源的model。
3 定义下下级的数据源和model。
4 在$watch 中更新model 即可。

代码量 十行搞定。

再比如要实现一个表格(分页,排序,过滤,编辑):


jquery 的实现思路 :

1 获取数值。
2 根据返回的值,来进行dom 的操作。
3 动态生成一些控件,然后绑定控件的事件。
4 在事件里面再进行dom 的操作以及数据的交互。
这个代码量应该也不少。

angular.js 实现思路:

1 ngRepeat渲染
2 filter过滤器过滤
3 orderBy排序
4 paging分页

代码量几十行左右。

如果写惯了jquery 代码的话再写angualr.js 的话会有一点不适应。但是熟悉之后会感觉非常的爽。angular.js 除了Directive之外其他地方绝对不能使用dom 操作,切记。

二 理解angular.js 框架

如图所示为 angular.js 启动过程:

1 浏览器载入HTML,解析成DOM。
2 加载Angular类库。
3 DOMContentLoaded事件中开始bootstrap。
4 寻找 ng-app, 注入服务。
5 编译DOM并链接到对于的scope数据。

angular.js 执行过程:

1 浏览器等待用户事件触发(用户交互,定时器,网络事件)。
2 浏览器执行事件回调,进入Javascript上下文。
3 Angular在$apply中接管了JS的执行部分。
4 Angular进入$digest循环。
5 Angular进行脏数据检查。
6 批量更新DOM,$digest结束。
7 浏览器开始渲染。

以如下代码为例 :

 1 <div ng-app="mymodule">
 2     <div ng-controller="mycontroller">
 3         <input ng-model="name"/>
 4         <p>{{name}}</p>
 5     </div>
 6 </div>
 7
 8 <script src="~/Scripts/angular.min.js"></script>
 9 <script type="text/javascript">
10
11     var mymodule = angular.module(‘mymodule‘, []);
12
13     mymodule.controller(‘mycontroller‘, function ($scope) {
14
15         $scope.name = "hello angular";
16
17     });
18
19 </script>

编译期
1 解析ng-model并为input绑定key事件。
2 为{{name}}建立$watch表达式,进行监听。

执行期
1 用户在input输入按键,触发了浏览器的key事件。
2 事件回调, 进入Javascript上下文。
3 angular接管,在$apply中修改scope的name取值。
4 触发$digest流程。
5 脏数据检测,发现$watch列表中的name值变更。
6 通知对应的处理函数, 更新DOM。
7 Angular退出执行上下文,退出Javascript的事件处理函数。

angular.js 的学习是一个长期的过程,光学理论还是不够的,重要的是实践。多看,多写。

时间: 2024-06-16 20:24:11

对angular.js的一点理解的相关文章

对于Angular JS中$apply()的理解

最近在学angularjs知识,在网上找到这篇文章,来自于:http://my.oschina.net/u/1402334/blog/500683,解决了我目前面临的一些问题,感觉收获很大,特此转过来做个记录: Angular最引人注目的特性就是双向绑定,然而它是怎么做到的,我可以来总结两点: 将变化的数据从model传向view-->$apply 将变化的数据从view传向model-->$watch 这连个函数都是基于scope的基础上,对scope对象的成员变化状况进行传播的.那么,我不

对JS回调函数的一点理解

之前写的异步JS是纯译文,现在刚好工作了2个月,想谈谈我自己对JS回调函数的一点理解,欢迎渴望大家的指正和交流. 回调函数从形式上看就是把函数b作为参数传给函数a,在a的函数体里调用函数b 1 function a(b) { 2 b(); 3 } 4 function b() { 5 ... 6 } 这样做的意义是什么呢 1.控制执行流程,函数b只能在函数a执行后才执行 2.根据不同的需求,可以有各种各样的函数b 3.最重要的,是可以把通过函数a获取的数据传递给函数b 1 function a(

angular js的Inline Array Annotation的理解

inline Array annotation的形式是: someModule.controller('MyController', ['$scope', 'greeter', function($scope, greeter) { // ... }]);其中function($scope,greeter){}分别代表$scope对象,greeter对象. 现在我把上面的代码改动一点: someModule.controller('MyController', ['$scope', 'greet

angular js jquery中post请求的一点小区别

这也是最近遇到的坑,还是之前那个项目,现在要实现登录功能. 背景:注册功能之前已经跑通了.前端用的是jquery后台是springMVC.鉴于注册和登录有些接口功能是类似的(比如注册确保邮箱是没有注册过,而登录是确保注册过),于是后台还准备用注册的那套接口. 登录的接口get请求是没问题的,但是post却出了问题:后台收不到请求体里的内容. 后来发现是jquery和angular的post行为有些区别,于是我做了个实验. <!DOCTYPE html> <html lang="

学习angular.js的一些笔记想法(上)

1.data-ng-app与ng-app的区别 data-ng-app是为了h5不报错 2.ng-class 不多说就来拿例子说吧 html代码 <div class='color-changer' data-ng-class="{'color-changer-hiden':!colorChanger}"> </div> js代码: $scope.colorChanger=false; 此时的变量colorChanger=false,那么!colorChange

Angular JS学习笔记

之前的学习方法有点盲目,建议以后只看与工作有关的内容,并且多问那些是只和工作有关联的. 遇到问题的时候,项目不急的话,自己研究,项目急的话,马上问. 方法不对,再努力也没有用. Angular JS学习网站:http://www.zouyesheng.com/angular.html#toc7 [  项目有关的内容 ] ng-model ng-click ng-options ng-repeat ng-if ng-show ng-hide ng-controller ng-href(有印象) {

七步从Angular.JS菜鸟到专家(2):Scopes

这是"AngularJS - 七步从菜鸟到专家"系列的第二篇. 在第一篇我们展示了如何开始搭建一个Angular应用.在这一篇里,我们要讨论一个理解AngularJS运作原理所必须的基本概念,以及你如何更好地运用它. 在这个系列教程里,我们会开发一个NPR(美国全国公共广播电台)广播的音频播放器,它能显示Morning Edition节目里现在播出的最新故事,并在我们的浏览器里播放.完成版的Demo可以看这里. 第二部分 Scopes $scope是一个把view(一个DOM元素)连结到cont

精通 Angular JS 第一天——Angular 之禅

简介 Angular JS是采用JavaScript语言编写的客户端MVC框架,它为业界带了重大的变化,包括对模板化的创新实现,以及数据的双向绑定,这些特性使得它强大而易用.它可以用来帮助开发者编写单页面应用,尤其适合编写有大量CRUD操作的,具有Ajax风格的富客户端应用.大多数开发者认为,与其它框架相比,AngularJS明显缩减了项目所需的代码量. 2012年6月,Angular JS正式发布1.0版,在各种客户端MVC框架中,属于后起之秀.AngularJS主页(http://www.a

青出于蓝而胜于蓝 — Vue.js对Angular.js的那些进步

Angular.js与Vue.js是非常有渊源的两款前端框架,据Vue.js的官方网站描述,在其早期开发时,灵感来源就是Angular.js.而在很多方面,Vue.js也正像是中国的那句古话,"青出于蓝而胜于蓝".今天,K就从下面几个方面来跟大家一起探讨一下,Vue.js到底在哪些方面更"胜于蓝". (一)简单的操作 这是K看来Vue.js最杰出的的方法,Vue.js致力于视图层的展现,这使它在与其他项目进行整合的时候会变得非常easy,这也使它更容易"嵌