angular控制器的执行顺序和服务的注入情况
这篇文章到底要讲什么呢? 这必须要从栗子开始讲起...
看下面这两段代码:
demo1: http://jsfiddle.net/ujzmvp3j/1/
demo2: http://jsfiddle.net/m2d2b6qL/
'foo',服务中有一个name属性,它分别被注入到ctrlOne和ctrlTwo两个控制器中,然后在ctrlOne控制器里对name属性进行了修改.根据 angular五种服务详解 里所说的,服务的实例是一个引用对象,在一个地方修改它,其它地方也会变化.
所以,当在ctrlOne里面修改了name,ctrlTwo里面的name也变化了.

但是demo2,我们把两个div调换顺序:

可以看到,虽然js代码一样,修改了ctrlOne里面的name属性,但是视图的控制器Two里没有变化.
原因如下:
js书写控制器的顺序无所谓,它不会立刻实例化这些控制器,也不会在加载js以后就执行控制器里的代码,也不会注入服务和指令. 当解析html的时候,它的ng-controller遇到什么控制器,它就去实例化哪个控制器.这个时候,控制器里面的代码才会被执行到,服务等依赖也在这个时间被注入.
demo1里,html的顺序是 ng-controller='ctrlOne', ng-controller='ctrlTwo' 的时候,ctrlOne控制器就被实例化了,同时foo服务的实例也被注入了,然后在控制器里面修改foo服务的实例,再然后html继续向下解析,解析到ctrlTwo,这个时候,ctrlTwo控制器也被实例化,foo服务的实例又被注入到ctrlTwo里,但是这时,foo服务实例的name属性已经被修改过了,所以ctrlTwo的$scope下的name属性值就是被修改过后的name值了.
demo2里,html的顺序反过来,导致ctrlTwo先实例化,ctrlOne后实例化,所以,在ctrlOne里修改name属性值,ctrlTwo里是不会被同步的,如果要同步监测变化,需要像 angular五种服务详解 里面的栗子一样,使用$watch.
angular控制器的执行顺序和服务的注入情况的更多相关文章
- 多线程时,请求执行不是按顺序的,可添加Critical Section Controller(临界部分控制器),执行顺序是固定的,但执行一段时间后,该逻辑器下的请求不再循环,无解ing
- try catch finally的执行顺序(有return的情况下)
结论:1.不管有木有出现异常,finally块中代码都会执行:2.当try和catch中有return时,finally仍然会执行:3.finally是在return后面的表达式运算后执行的(此时并没 ...
- Java异常捕获之try-catch-finally-return的执行顺序-转载
情况1:try块中没有抛出异常try和finally块中都有return语句 public static int NoException(){ int i=10; try{ System.out.pr ...
- 【转】C# 异常处理 throw和throw ex的区别 try catch finally的执行顺序(return)
[转]throw和throw ex的区别 之前,在使用异常捕获语句try...catch...throw语句时,一直没太留意几种用法的区别,前几天调试程序时无意中了解到几种使用方法是有区别的,网上一查 ...
- 【spring-boot神器】第一篇:拦截器,过滤器,监听器,控制器,消息转换器,AOP执行顺序
整理一下这几天学习的资料和代码 第一部分.上代码 1.spring各种器的实现,idea搭建spring-boot的教程在这里http://www.jianshu.com/p/9082a533fa3c ...
- ASP.NET MVC 全局过滤器(FilterConfig)、标记在控制器上和方法上的筛选器执行顺序
FilterConfig->控制器上的筛选器-->方法上的筛选器(大-->小,上-->下) 全局-->控制器->个别 尝试的时候记得把返回true protecte ...
- Jmeter -- 循环控制器和线程并发(关注执行顺序)
测试计划中包含两个线程组,分别设置如下: 线程组1:线程数为2,循环次数为4 线程组2:线程数为4 执行顺序 监听器View Results in Table(用表格查看结果)中,ThreadName ...
- jmeter元件执行顺序及简介
最近在学习Jmeter,在进行实操之前,先查看了官方文档.因为官方文档是英文的,为了方便以后查看,自己翻译了一部分,中间个别地方根据自己的理解简单地翻译了部分.如果翻译等有问题,欢迎指正. 一.执行顺 ...
- Angular开发者指南(五)服务
服务 AngularJS服务是使用依赖注入(DI)连接在一起的可替代对象. 可以使用服务在整个应用程式中整理和分享程式码. AngularJS服务有: 延迟初始化 - AngularJS只在应用程序组 ...
随机推荐
- 基于全注解的SpringMVC+Spring4.2+hibernate4.3框架搭建
概述 从0到1教你搭建spring+springMVC+hibernate整合框架,基于注解. 本教程框架为基于全注解的SpringMVC+Spring4.2+hibernate4.3,开发工具为my ...
- ajax post方式下载后台传来的文件
参考:http://stackoverflow.com/questions/16086162/handle-file-download-from-ajax-post $.ajax({ type: &q ...
- java实现读取ftp服务器上的csv文件
定义ftp操作接口 import java.io.InputStream; import java.util.List; import org.apache.commons.net.ftp.FTPCl ...
- uitextview根据内容算高度
UITextView根据内容自动改变frame 分类: iOS2013-03-08 07:27 190人阅读 评论(0) 收藏 举报 注意点: 在textview中计算string占据的高度不能使用[ ...
- 百度地图 ijintui以及七牛、百度编辑器、kindeditor
密码是明文存储的 sig错误是因为params没拼接上md5后的秘钥,测试时候可以在 Api\Controller\CommonController\_initialize 方法里注释掉效验的代码 代 ...
- 树莓派进阶之路 (027) - 在Linux中增加swap空间
原贴地址:http://blog.csdn.net/chinalinuxzend/article/details/1759593 在Linux中增加swap空间 在安装Linux的时候,不知道swa ...
- C/C++函数指针(typedef简化定义)
学习要点: 1,函数地址的一般定义和typedef简化定义; 2,函数地址的获取; 3,A函数地址作为B函数参数的传递; 函数存放在内存的代码区域内,它 ...
- AI 高等数学、概率论基础
一.概论 基础引入: 原理一:[两边夹定理] 原理二:[极限] X为角度x对应的圆弧的点长: 原理三[单调性]: 引入: 二.导数 常见函数的导数: 四.应用: 求解: 泰勒展式和麦克劳林展式: 泰勒 ...
- 什么是 SUID, SGID 和 Sticky bit
在可执行文件中有三种权限,如下: 1. SUID 权限 (Set-user Identification) 2. SGID 权限(Set-group identification) 3. Sticky ...
- List元素排序简例
前言:这种处理方式,在程序中偶尔会用的到,栗子很简单,关键是加强一下记忆,以及以备后用 1:实现Comparable接口的方式 1-1:没有使用泛型,重写compareTo()方法时需要判断类型及转换 ...