AngularJS之expression

Author: ChinSyun Pang
Weibo: arthinking_plus
Posted in: http://www.itzhai.com

表达式和eval(javascript)非常相似,但是由于表达式由AngularJS来处理,它们有以下显著不同的特性:

  • 所有的表达式都在其所属的作用域内部执行,并有访问本地$scope的权限;
  • 如果表达式发生了TypeError和ReferenceError并不会抛出异常;
  • 不允许使用任何流程控制功能(条件控制,例如if/eles);
  • 可以接受过滤器和过滤器链。

6.1、解析AngularJS表达式

$parse: AngularJS通过$parse这个内部服务来进行表达式的运算,这个服务能够访问当前所处的作用域。

$parse/$eval和$observe/$watch如何区分

6.2、插值表达式

$interpolate服务: 插值允许基于作用域上的某个条件实时更新文本字符串,可接收三个参数:

  • text(字符串):一个包含字符插值标记的字符串。
  • mustHaveExpression(布尔型):如果将这个参数设为true,当传入的字符串中不含有表达式时会返回null。
  • trustedContext(字符串):AngularJS会对已经进行过字符插值操作的字符串通过$sec.getTrusted()方法进行严格的上下文转义。