大部分传统的模板系统,对模板的渲染是个线性单向的过程;模板或变量与模板混合在一起产生结果的标记集合。任何对模型的改变都需要通过模板的重新计算。但AngularJS有所不同,任何用户引发的视图的改变,都会映射在模型上,继而任何模型的改变,也会立即传播到整个模板。

一、作用域

  AngularJS中的$scope对象是模板的域模型(domain model),也称为作用域实例(instance)。通过对其赋值,可以传递数据给模板渲染。

  每个$scope都是Scope类的实例。Scope类有很多方法,用于控制作用域的生命周期、提供事件传播(event-progagation)功能,以及支持模板的渲染等。

  1.1 作用域层级

  ng-controller指令是作用域创建(scope-creating)指令。当在DOM树中遇到作用域创建指令时,AngularJS都会创建Scope类的新实例$scope。新创建的作用域实例$scope会拥有$parent属性,并指向它的父作用域。

  AngularJS拥有$routScope,它是其他所有作用域的父作用域,将在新应用启动时创建。众多作用域形成了以$rootScope为根的树结构。

  1.2 作用域层级和继承

  作用域中定义的属性对所有子作用域是可见的,只要子作用域没有定义同名的属性。

  AngularJS中的作用域继承和Javascript中的原型继承遵循同样的规则,沿继承树向上查找属性,直至找到为止。

  1.3 在作用域层级中继承的风险

  有两种方法可以从子作用域中影响定义在父作用域中的属性:

  首先,可以使用$parent属性明确地引用父作用域。但这种解决方案相当不可靠。

  另一种解决方案是将变量绑定为某对象的属性,而不是直接绑定为作用域的属性。

<body ng-app ng-init="thing={name:'World'}">
<h1>Hello,{{thing.name}}<h1>
<div ng-controller="HelloCtrl">
Say hello to:<input type="text" ng=model="thing.name">
<h2>Hello,{{thing.name}}!</h2>
</div>
</body>

  1.4 作用域生命周期

  作用域提供独立的命名空间,避免变量的命名冲突。因此,小型、组织良好的作用域,能节约内存的使用。作用域在不需要后会被销毁,在其中暴露的模型和函数都会被垃圾回收。

二、控制器

  控制器的主要职责是初始化作用域实例。

  2.1 提供模型的初始值。

  2.2 增加UI相关的行为(函数)以扩展$scope对象。

  控制器可以让你在JavaScript代码中表达初始化逻辑,而不是污染HTML模板。

三、模型

  AngularJS的模型(model)实际上就是普通的JavaScript对象。与控制器类似,不需要特别地去扩展任何AngularJS底层类,也不用去构造模型对象。

四、视图

  AngularJS与HTML和DOM有着更加紧密的联系,因为AngularJS依靠浏览器去解析模板文本,浏览器将文本转换成DOM树之后,AngularJS参与进来,开始遍历解析好的DOM结构。当遇到指令时,AngularJS就执行相关逻辑,将指令转换成页面的动态部分。

  

Angularjs学习笔记(一)的更多相关文章

  1. AngularJs学习笔记--Forms

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/forms 控件(input.select.textarea)是用户输入数据的一种方式.Form(表单) ...

  2. AngularJs学习笔记--expression

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/expression 表达式(Expressions)是类Javascript的代码片段,通常放置在绑定 ...

  3. AngularJs学习笔记--directive

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/directive Directive是教HTML玩一些新把戏的途径.在DOM编译期间,directiv ...

  4. AngularJs学习笔记--Guide教程系列文章索引

    在很久很久以前,一位前辈向我推荐AngularJs.但当时我没有好好学习,仅仅是讲文档浏览了一次.后来觉醒了……于是下定决心好好理解这系列的文档,并意译出来(英文水平不足……不能说是翻译,有些实在是看 ...

  5. AngularJs学习笔记--bootstrap

    AngularJs学习笔记系列第一篇,希望我可以坚持写下去.本文内容主要来自 http://docs.angularjs.org/guide/ 文档的内容,但也加入些许自己的理解与尝试结果. 一.总括 ...

  6. AngularJs学习笔记--html compiler

    原文再续,书接上回...依旧参考http://code.angularjs.org/1.0.2/docs/guide/compiler 一.总括 Angular的HTML compiler允许开发者自 ...

  7. AngularJs学习笔记--concepts(概念)

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/concepts 继续.. 一.总括 本文主要是angular组件(components)的概览,并说明 ...

  8. AngularJS学习笔记2——AngularJS的初始化

    本文主要介绍AngularJS的自动初始化以及在必要的适合如何手动初始化. Angular <script> Tag 下面通过一小段代码来介绍推荐的自动初始化过程: <!doctyp ...

  9. AngularJs学习笔记--Using $location

    原版地址:http://code.angularjs.org/1.0.2/docs/guide/dev_guide.services.$location 一.What does it do? $loc ...

  10. AngularJs学习笔记--unit-testing

    原版地址:http://docs.angularjs.org/guide/dev_guide.unit-testing javascript是一门动态类型语言,这给她带来了很强的表现能力,但同时也使编 ...

随机推荐

  1. jquery中获取元素的几种方式小结

    1 从集合中通过指定的序号获取元素 html: 复制代码代码如下: <div> <p>0</p> <p>1</p> <p>2&l ...

  2. LAMP_02_WIN下Apache安装配置

    1.下载http://httpd.apache.org/download 2.配置 下载完解压后有readme,首先进行阅读其中的VC运行库必须安装,否则会出现各种奇葩问题用命令行安装服务 发现报错, ...

  3. Django RedirectView

    RedirectView作用是重定向一个指定,给定的Url.这个给定的Url可能包含有字典风格的字符串,因为关键字(词)会被改变,所以从这个Url中捕获的参数可能也会被修改,例如,Url中的“%”应该 ...

  4. 无需Try catch 的UI事件封装类

    在UI处理中,经常需要进行异常处理,以便在错误发生时能够进行一些自定义的操作,比如,弹出消息框给用户,进行重试操作,记录日志等,如果能够让用户写代码时不用写try...catch,而只是关注业务逻辑的 ...

  5. Delphi系统变量:IsMultiThread对MM的影响

    前几日,调试一BUG,过程先不说,最后调试到MM,即Debug dcu,然后进入到GetMem.inc中的Get/FreeMem函数处后,出现AV. 然后一通找...郁闷了N天,后来发现将MM切换到Q ...

  6. ubuntu12.04 安装mac主题

    1.下载主题包我把主题上传到了csdn的资源栏目,下载地址:http://download.csdn.net/detail/chenjiebin/4531537 2.将/mac/sharc/theme ...

  7. load mainaccount

    static void LoadMainAccountCSV(Args _args) { /* SysExcelApplication        excel; SysExcelWorkbooks  ...

  8. Scorpio-CSharp简介

    Scorpio-CSharp是为了解决Unity游戏各个平台热更新的问题,纯c#实现 基于.net2.0 兼容所有c#平台 语法类似 javascript, 设计初衷是为了做一个所有人都能修改的热更新 ...

  9. 【原创】android内存管理-hprof文件

    转载请注明出处 http://www.cnblogs.com/weiwangnuanyang/p/5703702.html 如果只是想确定一下某一个场景是否有内存泄漏,AndroidStadio的控制 ...

  10. 头像上传,拖拽,裁切 (非HTML5)版本

    演示地址: http://codeman35.itongyin.com:19002/v2/web_demo.html 功能: 支持滚轴放大缩小,鼠标拖动,裁切可视区域,裁切和图片处理都是后端操作.