首先还是要强调一下DI,DI(Denpendency Injection)伸手获得,主要解决模块间的耦合关系.那么模块是又什么组成的呢?在我看来,模块的最小单位是类,多个类的组合就是模块.关于在根模块上如何创建控制器我已经在上一篇简单讲过了,现在补充一下,首先是控制器的命名,控制器的命名应遵循这样的规则:(view的模块名)业务名+Controller,如loginContrl.然后是要注意不能在controller里面进行dom的操作,只能在自定义的指令里的link方法里面操作dom.

关于angular.element在angular中的使用和jQuery中的$("")是完全一样的,当本页面中没有外部的jquery,angular.element是等价于jqlite的.

$是区别angular内部类与定义类的标识,而$$表示私有方法.

function($scope)告诉我们$injector所在angular里面不能直接对类进行实例化,调用只能先申明,后使用.

不管做什么事,遵循5W2H分析法都能很有效提高工作效率,angular就很好遵循了这样的分析法,这给开发带来很大的便利.

run:是angular中的main方法,是整个angular的入口方法,run只会在整个angular生命周期内只会调用一次.

当我们的html元素出现嵌套关系的时候,内层继承外层的变量造成值的重写问题

$rootScope是一个angular的内部类,作用是用于根模块的数据缓存,用于模块与模块间的数据共享.

$scope的作用:1.$scope用于绑定view的抽象(属性和方法).

       2.$scope是连接controller与view之间的数据桥梁,是实现angular中的MVVM模块的核心类.

       3.$scope是实现双向数据绑定的关键类.

       4.$scope是用来监视view,Model之间的数据变化,并通知对方,从而实现view与Model之间的数据同步.

       5.$scope可以实现controller与controller之间的事件传递(类似js事件冒泡,事件捕捉)

另外补充一些$scope常用的方法:

$scope.$emit  向上一级控制器发送事件(冒泡)

$scope.$broadcast  向下传递事件(捕获)

$scope.$on  用来接收事件的值

$watch是用手动添加监视器,

它的语法为:

$watch(监视的对象(可以值类型/引用类型)val,监视有变化的回调方法:fn,true|false(true对引用类型进行监视));

fn(新输入的值,缓存的过去值)

上一篇里面我们谈到angular可以进行双向数据绑定,那么这就涉及一个问题,angular在什么情况下可以进行双向数据绑定呢?

这里就涉及一个触发脏检查的问题,这里简单介绍两种方法来机制来触发,一种是主动触发,当页面上有以ng-为开头的指令和以$为开头的服务才会触发脏检查,另一种是手动检查,调用$scope里面的$apply方法,它是用来手动触发angular的dirty checking. $apply会调用$digest()进行轮询,最终调用$watch来实现双向数据绑定.

脏检查(dirty checking): 绑定的值与上一次缓存中的值有没有发生变化,如果有变化,数据dirty.那么怎样才知道绑定的值发生了变化呢?

当我们在$scope上面绑定一个属性的时候,angular就会在这个属性上添加一个$$watcher(),这个监视器有两个作用,一个就是多长时间后缓存一次数据,另一个就是比较这个数据.当我们在使用ng-*表达式的时候,angular在{{val}}上绑定一个watcher.在angular里有它的循环访问的机制,$digest就是angular内置的一个服务,它以loop(循环)方式访问监视器列表(angular $watcher list)(相当于while()方法),$watcher会执行值的比较,当这次比较的值不相等的时候,表示watcher的值需要进行数据同步,就会把model -view 的数据进行更新.

触发脏检查的目的是为了监测值是否发生变化,怎么知道值发生变化呢,就需要拿到上一次的值,要拿到上一个值就需要不断的进行轮询,由此可见angular双向数据绑定是十分耗费性能的,他会把所有的属性添加一个监视器,然后还有一个轮询不断询问是否发生变化.$scope上绑定超过2000个属性之后性能就变得十分差.因此angular的双向数据绑定其实是一把双刃剑.

一边学习一边写博,在大框架下用到什么写什么,最后回头看发现写得有点杂乱.

angular1.x的简单介绍(二)的更多相关文章

  1. Linux 下UVC&V4L2技术简单介绍(二)

    通过前文Linux 下UVC&V4L2技术简单介绍(一)我们了解了UVC和V4L2的简单知识. 这里是USB设备的文档描写叙述:http://www.usb.org/developers/do ...

  2. rabbitmq的简单介绍二

    上一篇博客我们没有介绍完rabbitmq,今天我们接着上一篇的博客继续介绍rabbitmq 这边的博客的内容如下 1.组播,对指定的队列设置关键词,通过关键词来控制消息的分发 2.更加细致的组播 先来 ...

  3. angular1.x的简单介绍 (一)

    angular1.x作为经典的mvc框架,可以创建能够复用的组件,也可进行双向数据绑定.国内的vue.js/avaloon.js都是同类型的框架.适合使用angularjs的项目有大型信息化管理系统: ...

  4. 一、tars简单介绍 二、tars 安装部署资料准备

    1.github地址https://github.com/Tencent/Tars/ 2.tars是RPC开发框架,目前支持c++,java,nodejs,php 3.tars 在腾讯内部已经使用了快 ...

  5. 利用Python进行数据分析(4) NumPy基础: ndarray简单介绍

    一.NumPy 是什么 NumPy 是 Python 科学计算的基础包,它专为进行严格的数字处理而产生.在之前的随笔里已有更加详细的介绍,这里不再赘述. 利用 Python 进行数据分析(一)简单介绍 ...

  6. Android 驱动(二) IIC简单介绍

    一. I2C简单介绍 I2C(Inter-Integrated Circuit)总线是一种由 Philips 公司开发的两线式串行总线,用于连接微控制器及其外围设备.I2C 总线最基本的长处就是简单性 ...

  7. Java NIO简单介绍(二)

    上一篇<NIO简单介绍(一)>中讲解了NIO中本地IO相关的内容,这篇重点介绍的NIO的非阻塞式网络通信 一.阻塞与非阻塞 传统的 IO 流都是阻塞式的.也就是说,当一个线程调用 read ...

  8. Android项目开发全程(二)--Afinal用法简单介绍

    本篇博文接上篇的<Android项目开发全程(一)--创建工程>,主要介绍一下在本项目中用到的一个很重要的框架-Afinal,由于本系列博文重点是项目开发全程,所以在这里就先介绍一下本项目 ...

  9. 决策树简单介绍(二) Accord.Net中决策树的实现和使用

    决策树介绍 决策树是一类机器学习算法,可以实现对数据集的分类.预测等.具体请阅读我另一篇博客(http://www.cnblogs.com/twocold/p/5424517.html). Accor ...

随机推荐

  1. bzoj 4326: NOIP2015 运输计划

    4326: NOIP2015 运输计划 Time Limit: 30 Sec Memory Limit: 128 MB Description 公元 2044 年,人类进入了宇宙纪元.L 国有 n 个 ...

  2. 【JavaWeb】Spring+SpringMVC+MyBatis+SpringSecurity+EhCache+JCaptcha 完整Web基础框架(三)

    Spring+SpringMVC MVC呢,现在似乎越来越流行使用SpringMVC框架,我自己用的感觉,是非常好,确实很舒服,配置一开始是麻烦了一点点,但是后续的开发真的是很清爽! SpringMV ...

  3. 关于ACM的总结

    看了不少大神的退役帖,今天终于要本弱装一波逼祭奠一下我关于ACM的回忆. 从大二上开始接触到大三下结束,接近两年的时间,对于大神们来说两年的确算不上时间,然而对于本弱来说就是大学的一半时光.大一的懵懂 ...

  4. SQLite

      什么是SQLite SQLite是一款轻型的嵌入式数据库 它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了 它的处理速度比Mysql.PostgreSQL这两款著名的数据库都还快 ...

  5. Mysql支持的数据类型(总结)

    一.数值类型 Mysql支持所有标准SQL中的数值类型,其中包括严格数据类型(INTEGER,SMALLINT,DECIMAL,NUMBERIC),以及近似数值数据类型(FLOAT,REAL,DOUB ...

  6. 通过设置CSS属性让DIV水平居中

    通过设置CSS属性让DIV水平居中 ---------------------- <html> <head> <title></title> <m ...

  7. React的井字过三关(3)

    这是React井字棋项目的最后一篇笔记,记述AI实现. 一. 是开头都会说的原理 但凡懂一点围棋的人都知道"大场"这个概念,可以浅显地把它理解为布局时棋盘上各处的要点.棋谚&quo ...

  8. 数据存储_FMDB

    一.简单说明 1.什么是FMDB FMDB是iOS平台的SQLite数据库框架 FMDB以OC的方式封装了SQLite的C语言API 2.FMDB的优点 使用起来更加面向对象,省去了很多麻烦.冗余的C ...

  9. jquery 杂记

    返回指定属性名的属性值:getAttribute() 设置元素的属性值:attr('src',voiceurl) form表单: 序列化表单值: $('#formid').serialize()   ...

  10. Linux命令-自动挂载文件/etc/fstab功能详解[转]

    一./etc/fstab文件的作用 磁盘被手动挂载之后都必须把挂载信息写入/etc/fstab这个文件中,否则下次开机启动时仍然需要重新挂载. 系统开机时会主动读取/etc/fstab这个文件中的内容 ...