2016-10-06 46 views
0

在角js中执行此代码段时包含html文件。为什么在初始化之前允许访问变量angularjs范围

<p>{{a}} remains {{a = 2;}}</p>

它没有通过引用错误的异常。

但是,angularjs是后代或建立在普通香草js为什么这个subtlity。

以下是普通js中的等效代码。

alert(a); 
a = 2; 

正如我期待的那样,它通过引用错误异常执行它,但为什么不是angularjs。

回答

1

因为你的第一个角度模板片段不是javascript的直接声明,所以它的角度模板引擎评估它。而且,它不会产生javascript错误输出,因为当您第一次编写{{a}}时,您将为范围内的变量a创建模板引擎输出,该变量在该时刻未定义。但是,当您编写{{ a = 2; }}时,请触摸范围以声明a,使角引擎重新绘制片段并应用新绑定值并在{{a}}片段上生成有效输出。

例如:

<p ng-controller="AppCtrl">{{a}} remains {{ declare(); }}</p> 

angular.module('app', []) 
    .controller('AppCtrl', 
    ['$scope', '$timeout', 
     function ($scope, $timeout) { 
     $scope.declare = function(){ 
      $timeout(function(){$scope.a = 2;}, 2000); 

     } 
    }]); 

该代码在第一时刻的模板评估后会产生remains和2秒,将产生2 remains

相关问题