Angular的一些知识点
来源:互联网 发布:编程资料 编辑:程序博客网 时间:2024/05/19 18:15
作用域的声明周期
浏览器接收到事件后的一般工作流程是执行一个相应的Javascript回调。回调一执行完,浏览器就会重新渲染DOM并且重新回到等待事件的状态。
当浏览器调用AngularJS上下文之外的Javascript代码时,AngularJS是不知道模型的更改的。要正确处理模型的更改,就要使用$apply方法进入AngularJS的执行上下文。只有在$apply方法内执行的模型修改才会正确地被AngularJS处理。比如,一个指令监听DOM事件,比如
ng-click
,它必须在$apply方法中来执行表达式。执行完表达式之后,$apply会进入$digest阶段。在$digest阶段作用域会检查所有的$watch表达式,并将它们和之前的值比较。这个检查工作是异步执行的。这意味着赋值语句,如
$scope.username="angular"
不会马上导致$watch被通知,取而代之的是它会等到$digest阶段才被通知。这种方式是合理的,因为它将多个模型的更新整合到一个$watch通知里,并且保证了一个$watch通知期间不会有其他$watch执行。如果一个$watch改变了模型的值,那么它会产生一个额外的$digest阶段。
- 创建——根作用域是在应用被$injector启动时创建的。在模板链接阶段,有些指令会创建新的子作用域。2.观察者注册——在模板链接阶段,指令会在作用域上注册观察者。这些观察者是用来将模型的改变传递给DOM的。
- 模型变化——为了正确地观测到模型变化,你需要并且只能在scope.$apply()中改变他们。(AngularJS的API会隐式地这么做,所以在控制器或者在$http,$timeout等服务中你不需要额外的调用$apply)。
- 变化的观测——在$apply的最后,AngularJS会在根作用域中执行一个$digest循环,它会将变化传递给所有子作用域。在$digest循环中,所有的$watch表达式或者函数都会被检测,来观察模型的变化。如果有变化被检测到了,$watch的监听回调就会被调用。
- 作用域的销毁——如果子作用域不再有用了。那么子作用域的创建者就会负责用scope.$destroy() API来将它销毁。这会停止$digest再调用子作用域,并且让作用域占用的内容能够被回收。
每一个AngularJS应用都有一个注入器(injector)用来处理依赖的创建。注入器是一个负责查找和创建依赖的服务定位器。
等效的表示的自己需要的依赖的方法:推断依赖
最简单的处理依赖的方法,就是假设函数的参数名就是依赖的名字
function MyController($scope, greeter) { ...}
$inject 标记
要允许压缩类库重命名函数参数,同时注入器又能正确处理依赖的话,函数需要使用$inject属性。这个属性是一个包含依赖的名称的数组。
var MyController = function(renamed$scope, renamedGreeter) { ...}MyController.$inject = ['$scope', 'greeter'];
行内标记
有时候用$inject标记不是很方便,比如用来声明指令的时候。
比如:
someModule.factory('greeter', function($window) { ...;});
使用$inject会导致代码膨胀:
var greeterFactory = function(renamed$window) { ...;};greeterFactory.$inject = ['$window'];someModule.factory('greeter', greeterFactory);
这种情况我们就推荐使用第三种方式
someModule.factory('greeter', ['$window', function(renamed$window) { ...;}]);
- Angular的一些知识点
- Angular的一些怪事
- Angular的一些坑
- angular的一些基本常识
- Angular知识点
- angular知识点
- 关于 angular 的一些调试
- angular框架的一些理解
- angular js 的一些特性
- Hibernate的一些知识点
- c#的一些知识点
- sim300的一些知识点
- GDI的一些知识点
- IFRAME的一些知识点
- PHP的一些知识点
- python 的一些知识点
- 一些常用的知识点
- 静态的一些知识点
- 盗梦空间
- ListActivity中android:id="@+id/android:list"
- HDU - 2224 The shortest path (双调欧几里德旅行商问题)
- 基于XMPP的即时通讯工具(一)
- Java应用打包后运行需要注意编码问题
- Angular的一些知识点
- MyEclipse2014快速配置Spring & Spring Testing, Spring AOP简单使用
- 天声人語 20150724
- JAVA流操作(2)文件流
- Lowest Common Ancestor of a Binary Search Tree
- oracle 数据库设计的一些原则
- ASP.net实现上传APK文件并且下载APK
- ava.math.BigDecimal的用法
- Ilist 与 list 的区别