控制器:

  就像 JavaScript 里的构造函数一般,用来增强作用域(scope),当一个控制器通过 ng-controller 指令来添加到 DOM 中时,

  ng 会调用该控制器的构造函数来生成一个控制器对象,且会创建一个新的子级作用域

注:在这个构造函数中,作用域会作为 $scope 参数注入其中,并允许用户代码访问它

使用控制器:

  1、初始化 $scope 对象

// 设置属性 attrName 的值为 value
$scope.attrName = value;

  2、为 $scope 对象添加行为(方法)

// 添加方法 func
$scope.func = function([params]) {...}

任何对象(或原生类型的变量)被添加到 scope 后都将成为 scope 的属性,作为数据模型供模板/视图调用

任何方法被添加到 scope 后,也能在模板/视图中通过 Angular 表达式或是 Angular 的事件处理器调用

注:Angular的模板是一个声明式的视图,它指定信息从模型、控制器变成用户在浏览器上可以看见的视图

 千万不要使用控制器的场合:

  1、任何形式的 DOM 场合:控制器只应包含业务逻辑

  2、格式化输入:使用 Angular 表单控件代替

  3、过滤输出:使用 Angular 过滤器代替

  4、在控制器间复用有状态或无状态的代码:使用 Angular 服务代替

  5、管理其它部件的生命周期

注:可通过将那些不属于控制器的逻辑都封装到服务中,然后在控制器中通过依赖注入(DI)调用相关服务来保持控制器的“纯度”

实现控制器和 scope 对象的关联:

  1、ngController 指令:创建一个新的 scope

  2、$route 路由服务

作用域(scope):

  1、一个存储应用数据模型的对象

  2、为表达式提供一个执行上下文

  3、作用域的层级对应于 DOM 的树结构

  4、作用域可监听表达式的变化并传播事件

补充:

  1、作用域提供了($watch)方法监听数据模型的变化

  2、作用域提供了($apply)方法把不是由 Angular 触发的数据模型的改变引入 Angular 的控制范围

  3、作用域提供了基于原型链继承其父作用域属性的机制

  4、作用域提供了表达式的执行环境,必须在一个拥有这个属性作用域执行才有意义

注:在自定义指令中,处在模板的链接阶段时,指令会设置一个 $watch 函数来监听着作用域中各个表达式

  $watch 允许指令在作用域中的属性变化时收到通知,进而让指令能够根据这个变化对 DOM 重新渲染,更新它改变的属性值

  a、控制器 --> 作用域 --> 视图(DOM)

  b、指令 --> 作用域 --> 视图(DOM)

    控制器和指令是相互分离的,而且它们与视图之间也是分离的(耦合度低),可大大提高对应进行测试的工作效率

注:作用域的结构对应 DOM 结构,最顶层和 DOM 树的根节点一样,每个 Angular 应用有且仅有一个 root scope,子作用域可有多个

  作用域对象与指令或控制器等 Angular 元素所在的 DOM 节点相关联 ==》 DOM 节点上可抓取到作用域这个对象

Angular 学习笔记(二)的更多相关文章

  1. angular学习笔记(二十八-附2)-$http,$resource中的promise对象

    下面这种promise的用法,我从第一篇$http笔记到$resource笔记中,一直都有用到: HttpREST.factory('cardResource',function($resource) ...

  2. angular学习笔记(二十九)-$q服务

    angular中的$q是用来处理异步的(主要当然是http交互啦~). $q采用的是promise式的异步编程.什么是promise异步编程呢? 异步编程最重要的核心就是回调,因为有回调函数,所以才构 ...

  3. angular学习笔记(二十七)-$http(5)-使用$http构建RESTful架构

    在angular中有一个特别为RESTful架构而定制的服务,是在$http的基础上进行了封装. 但是为了学习,我们先看看用直接$http是如何构建RESTful架构的: 假设有一个银行卡的列表.需要 ...

  4. angular学习笔记(二)-创建angular模块

    如果在页面的html标签(或任意标签)中添加ng-app,表示对整个页面应用angular来管理. 他是一个模块. 模块有助于把东西从全局命名空间中隔离. 今天学习如何自定义创建模块: <!DO ...

  5. angular学习笔记(二十八-附1)-$resource中的资源的方法

    通过$resource获取到的资源,或者是通过$resource实例化的资源,资源本身就拥有了一些方法,$save,$delete,$remove,可以直接调用来保存该资源: 比如有一个$resour ...

  6. angular学习笔记(二十八)-$http(6)-使用ngResource模块构建RESTful架构

    ngResource模块是angular专门为RESTful架构而设计的一个模块,它提供了'$resource'模块,$resource模块是基于$http的一个封装.下面来看看它的详细用法 1.引入 ...

  7. angular学习笔记(二十六)-$http(4)-设置请求超时

    本篇主要讲解$http(config)的config中的timeout项: $http({ timeout: number }) 数值,从发出请求开始计算,等待的毫秒数,超过这个数还没有响应,则返回错 ...

  8. angular学习笔记(二十五)-$http(3)-转换请求和响应格式

    本篇主要讲解$http(config)的config中的tranformRequest项和transformResponse项 1. transformRequest: $http({ transfo ...

  9. angular学习笔记(二十四)-$http(2)-设置http请求头

    1. angular默认的请求头: 其中,Accept 和 X-Requested-With是$http自带的默认配置 Accept:application/json,text/plain       ...

  10. angular学习笔记(二十三)-$http(1)-api

    之前说到的$http.get和$http.post,都是基于$http的快捷方式.下面来说说完整的$http: $http(config) $http接受一个json格式的参数config: conf ...

随机推荐

  1. 使用npm link 加速调试

    我们在把包发布到npm上时,如果需要对本地的包进行修改,我们需要改变一个版本,重新发布.然后测试时需要更新这个包进行测试.这样的话,每一次的调试都特别麻烦.我们可以使用npm link来加速这个调试过 ...

  2. MarkDown使用小技巧

    写作目的 笔者看完一些MarkDown入门文字后,发现很多文档对一些容易遇到的细微问题缺少解释.本文意欲稍作补充. 目标读者 使用MarkDown仅为了排版出更好看的文章,而不关注技术细节,不懂HTM ...

  3. Paper慢慢读 - AB实验人群定向 Recursive Partitioning for Heterogeneous Casual Effects

    这篇是treatment effect估计相关的论文系列第一篇所以会啰嗦一点多给出点背景. 论文 Athey, S., and Imbens, G. 2016. Recursive partition ...

  4. SP1043 GSS1 - Can you answer these queries I 线段树

    问题描述 LG-SP1043 题解 GSS 系列第一题. \(q\) 个询问,求 \([x,y]\) 的最大字段和. 线段树,维护 \([x,y]\) 的 \(lmax,rmax,sum,val\) ...

  5. LG5239 回望京都 组合数+暴力

    问题描述 LG5239 题解 我就是个傻逼,鉴定完毕. 连 \(C_m^n=C_{m-1}^n+C_{m-1}^{n-1}\) 都忘了. 所以暴力求出 \(1000\) 以内的 \(C_i^j\) , ...

  6. asp.net的原理

    Asp.net的作业流是指什么?很多人都不是很了解,也不知道是用来干什么的有怎样运用,其实能够从简略的基础了解. 作业流(Workflow),便是“事务进程的部分或全体在核算机使用环境下的主动化”(i ...

  7. [ Python入门教程 ] Python生成随机数模块(random)使用方法

    1.使用randint(a,b)生成指定范围内的随机整数.randint(a,b)表示从序列range([a,b])中获取一个随机数,包括b. >>> random.randint( ...

  8. Codeforces Round #602 (Div. 2, based on Technocup 2020 Elimination Round 3) F2. Wrong Answer on test 233 (Hard Version) dp 数学

    F2. Wrong Answer on test 233 (Hard Version) Your program fails again. This time it gets "Wrong ...

  9. 《最优化导论第4版》高清中文版PDF+高清英文版PDF+习题题解

    <最优化导论第4版>高清中文版PDF+高清英文版PDF+习题题解 存放在语雀 凸优化 · 语雀

  10. LeetCode 136:只出现一次的数字 Single Number

    题目: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次.找出那个只出现了一次的元素. Given a non-empty array of integers, every e ...