2016-10-06 44 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

相關問題