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并解析它:
   35   36   37   38   39   40   41   42   43   44   45