美文网首页
AngularJS学习之路——表达式(1)

AngularJS学习之路——表达式(1)

作者: lemonade_a | 来源:发表于2017-10-19 11:19 被阅读8次

表达式:

angularJS中广泛应用表达式,可以说是无处不在。

使用方法:{{ expression }}

表达式和eval非常相似,但这个表达式是由angularJS来处理,所以有下面几个特性:

  • 所有表达式都在其所属的作用域内部执行,并且有权访问$scope;

  • 当表达式发生TypeError和ReferenceError时,并不会抛出错误;

  • 不能使用任何的流程控制功能;

  • 可以接受过滤器或者过滤器链。

对表达式进行的任何操作,都会在其所属的作用域内部执行,因此可以在表达式内部调用那些限制在此作用域内的变量,并进行循环、函数调用、将变量应用到数学表达式中等操作。

如何手动解析angularJS那?

angularJS是由$parse这个内部服务来进行表达式运算,这个服务能够访问当前所处的作用域。并且还可以访问定义在$scope上的原始数据。

举个栗子

<div ng-app="app" ng-controller="MyController">
  <input type="text" ng-model="text">
  <h2>{{ parseValue }}</h2>
</div>

我们可以通过$watch去监听input文本框

angular.module('app',[])
.controller('MyController',function($scope,$parse){
  $scope.$watch('text',function(newVal,oldVal,scope){
    if( newVal != oldVal ){
      let parseFun = $parse( newVal );
      $scope.parseValue = parseFun(scope);
    }
  });
});

什么是$watch?

简单来说,$wtach是$scope对象上的一个方法,其作用就是监听数据的变化。

$watch方法会给Angular事件循环内的每个$digest调用装配一个脏值检查。如果在表达式上检测到变化,Angular总是会返回$digest循环。

$wtach方法

$watch函数本身接受两个必要参数一个可选的参数:
必选参数 :watchExpression 和 listener/callback;
可选参数 :objectEquality

watchExpression

watchExpression可以是一个作用域对象的属性,或者是一个函数。在$digest循环中的每个$digest调用都会涉及它。
如果watchExpression是一个字符串,Angular会在$scope上下文中对它求值。如果它是一个函数,那么Angular会认为它会返回应该被监控的值。

listener/callback

作为回调的监听器函数,它只会在watchExpression的当前值与先前值不相等(除了首次运行初始化期间)时调用。
并且该回调函数接受三个返回值:newValue(新值) 、oldValue(旧值) 、scope(作用域)

objectEquality

objectEquality是一个进行比较的布尔值,用来告诉Angular是否检查严格相等。

举个栗子:

...
$scope.name = 'Hello,World!';

$scope.$watch('name',function(newVal,oldVal,scope){
  console.log( newVal );
  console.log( oldVal );
})
...

大量的$watch会引起性能问题,所以我们最好在用完$watch之后将其销毁。$watch函数会给监听器返回一个注销函数,我们只要将其存到一个变量中,再次调用即可。

改写代码

...
$scope.name = 'Hello,World!';

let watch = $scope.$watch('name',function(newVal,oldVal,scope){
  console.log( newVal );
  console.log( oldVal );
});

/* 调用即可销毁 */
watch();
...

总结

  • 表达式的使用方法;
  • 手动解析AngularJS($parse、$watch);
  • $watch的用法。

相关文章

网友评论

      本文标题:AngularJS学习之路——表达式(1)

      本文链接:https://www.haomeiwen.com/subject/blcuuxtx.html