第六章 表达式

来源:互联网 发布:英雄800和英雄100知乎 编辑:程序博客网 时间:2024/06/06 20:04
前面使用的{{ }}符号将一个变量绑定到$scope上的本质就是一个表达式。

  表达式和eval()很相似,但有以下不同特性:

  • 所有表达式都在其所属作用域内部执行,并有访问本地$scope的权限
  • 不会抛出异常
  • 不允许有流程控制功能(if/else)
  • 可以接受过滤器和过滤器

解析AngularJS表达式

  尽管AngularJS会自动解析表达式,但有时也可以手动解析。AngularJS通过$pars这个内部服务来进行表达式运算。代码如下:

  

<!doctype html><html>    <head>        <script src="angularJs/1.2.13/angular.js"></script>    </head>    <body ng-app="myApp">        <div ng-controller="MyController">            <input ng-model="expr" type="text" placeholder="Enter an expression" />            <h2>{{ parseValue }}</h2>        </div>    </body>    <script>        angular.module("myApp", [])            .controller('MyController',                function($scope, $parse) {                    $scope.$watch('expr', function(newVal, oldVal, scope) {                        if (newVal !== oldVal) {                            // 用该表达式设置parseFun                             var parseFun = $parse(newVal);                            // 获取经过解析后表达式的值                            $scope.parseValue = parseFun(scope);                        }                    });                });    </script></html>

  上述代码中$watch函数有三个参数:$watch(watchFn, watchAction, deepWatch)

    watchFn:带有AngularJS表达式或函数的字符串,它会返回被监控数据模型的当前值

    watchAction:函数或者表达式,当为函数时,传入三个参数,分别是新值,旧值,作用                                      域对象的引用。

  deepWatch:是否深度监控,当为true时,不仅仅监控对象的简单的值, 也会监控对象                           属性的变化。

   $watch 函数会返回一个函数,当你不再需要接收变更通知时,可以用这个返回的函数注销监控器。

插值字符串

  

 

 

 

0 0
原创粉丝点击