AngularJS基础
Angular的表达式
- 作用域:
属性表达式是对应于当前的作用域的,不像Javascript对应的是全局window对象。 - 允许未定义值:
执行表达式时,AngularJS能够允许undefined或者null,不像Javascript会抛出一个异常。 - 没有控制结构:
你不能在AngularJS表达式中使用“条件判断”、“循环”、“抛出异常”等控制结构。 - 过滤器(类似unix中的管道操作符): 你可以通过过滤器链来传递表达式的结果。例如将日期对象转变成指定的阅读友好的格式。
- 不能定义函数
- 不能使用正则表达式
- 不能使用new操作符新建对象
- 不能使用按位操作符,逗号和void关键字
如果想使用更复杂的语句,可以在controller的函数中定义后,在view中调用该函数。
如果想自己指定一个angular表达式,可以使用$eval函数。
作用域
Angular不使用javascript的eval函数,而使用$parse服务执行其表达式。
在Angular代码中无法直接访问window和location等全局对象。目的是为了减少全局命名空间的污染而导致的恶心的BUG。
作为替代的,可以使用$window和$location。
你也可以使用this关键字访问当前的作用域对象。
内置过滤器:
currency, date, filter, orderBy等
如何创建自定义过滤器?
->app.filter
要注意这里不是或操作符!
可以通过冒号来给过滤器传递参数,比如,将123显示成带有两位小数的形式
$event
在ngClick或ngFocus这样的指令(Directive)中可以传递$event对象。
当页面中引入了JQuery时,$event对象是JQuery Event Object。
否则,$event对象是jqLite对象。顾名思义,angularjs自己实现了一套JQuery的精简版。
一次绑定
当表达式是以::开始的场合,此表达式被视为一次绑定。也就是说在此表达式获得值(non-undifined)后,$watch函数不会再更新此表达式的值。
一次绑定的用处
原因主要是为了减少浏览器资源的占用。
Value stabilization algorithm
引导程序
To be continue.
注入器
通过injector.annotate来推测参数
使用injector.invoke来进行实例参数注入
angular会在定义的函数原型链中添加$inject属性,此属性中放置函数的参数名称
12var aController = function($scope, greet){};aController.$inject = ["$scope", "greet"];另一种注释方式为内联注释,这种方式的优点为在对代码进行压缩时不会收到影响。否则$scope和greet可能会被转义。
1angular.module().controller("MyController", ["$scope", "greet", function($scope, greet){}]);
注释函数用于提取指定函数的参数
var injector = angular.injector([‘ng’]);
injector.annotate(function($q,greeter){})
由此可见,最安全的方式为使用最下面的方式,但是此方式写起来略显繁琐。还好还有各种第三方应用的支持。
譬如可以使用ngMin来对文件进行解析并转换,他会做如下的转换。
|
|
作用域
下面的文章写的很好,对于JavaScript的原型继承说明的很到位。
参考文章
AngularJs的四个作用域还不算完全看懂,需要实战演练和再次理解。
AngularJS存在四种作用域:
- 普通的带原型继承的作用域
ng-include, ng-switch, ng-controller, directive with scope: true; - 普通的带原型继承的,并且有赋值行为的作用域
ng-repeat,ng-repeat为每一个迭代项创建一个普通的有原型继承的子作用域,但同时在子作用域中创建新属性存储迭代项; - “Isolate”作用域
directive with scope: {…}, 该作用域没有原型继承,但可以通过’=’, ‘@’, 和 ‘&’与父作用域通信。 - “transcluded”作用域
directive with transclude:true,它也是普通的带原型继承的作用域,但它与“Isolate”作用域是相邻的好基友。
控制器的单体测试
使用karma进行测试,简单使用了一下,看起来很爽。等待学习。
自定义组件
指令
ngSrc标签阻止了浏览器向非法的目的地发送HTTP请求。
此句话的意思是