Page 40 - AngularJS权威教程
P. 40
20 第 6 章 表达式
第6章
表达式
表达式在AngularJS应用中被广泛使用,因此深入理解AngularJS如何使用并运算表达式是非
常重要的。
前面已经见过使用表达式的示例。用{{ }}符号将一个变量绑定到$scope上的写法本质上就
是一个表达式:{{ expression }}。当用$watch进行监听时,AngularJS会对表达式或函数进行
运算。
表达式和eval(javascript)非常相似,但是由于表达式由AngularJS来处理,它们有以下显
著不同的特性:
所有的表达式都在其所属的作用域内部执行,并有访问本地$scope的权限;
如果表达式发生了TypeError和ReferenceError并不会抛出异常;
不允许使用任何流程控制功能(条件控制,例如if/eles);
可以接受过滤器和过滤器链。
对表达式进行的任何操作,都会在其所属的作用域内部执行,因此可以在表达式内部调用那
些限制在此作用域内的变量,并进行循环、函数调用、将变量应用到数学表达式中等操作。
6.1 解析 AngularJS 表达式
尽管AngularJS会在运行$digest循环的过程中自动解析表达式,但有时手动解析表达式也是
非常有用的。
AngularJS通过$parse这个内部服务来进行表达式的运算,这个服务能够访问当前所处的作
用域。这个过程允许我们访问定义在$scope上的原始JavaScript数据和函数。
将$parse服务注入到控制器中,然后调用它就可以实现手动解析表达式。举例来说,如果页
面上有一个输入框绑定到了expr变量上,如下所示:
<div ng-controller="MyController">
<input ng-model="expr"
type="text"
placeholder="Enter an expression" />
<h2>{{ parseValue }}</h2>
</div>
我们可以在MyController中给expr这个表达式设置一个$watch并解析它: