簡體   English   中英

為什么在AngularJS中調用未定義的函數時沒有錯誤?

[英]Why is there no error when calling an undefined function in AngularJS?

我有以下示例: https//jsfiddle.net/vr0dkwrh/1/

基本上,我正在調用范圍中不存在的函數。 為什么瀏覽器中沒有顯示錯誤? (我已經使用Firefox 38.1和IE 11進行了測試)。

單擊錨點'click me'時,將調用go()

單擊錨點'click me2'時,將調用go2()但它不存在且控制台中沒有錯誤。

為了記錄,我是AngularJS的新手,我被要求在如此短的時間內(2天......)學習它。

有人能告訴我這是否是AngularJS中的正常行為?

我不得不在JSFiddle中選擇1.2.1版本,但我在本地使用1.4.4。

HTML:

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge">
    <title>AngularJS Test</title>
  </head>
  <body>
    <div class="col-lg-12" ng-app="app" ng-strict-di>
      <div ng-controller="EditableRowCtrl">
          <a ng-href="#here" ng-click="go()" >click me</a><br />
          <a ng-href="#here2" ng-click="go2()" >click me2</a><br />
      </div>
    </div>
    <script src="../libs/angularjs.js"></script>
    <script src="../app/app-test1.js"></script>
  </body>
</html>

使用Javascript:

(function(){
'use strict';

function GoodController1($scope, $http, $filter) {
  $scope.go = function(){
    console.log('asd');
    //notexists();
  };
}
GoodController1.$inject = ["$scope", "$http", "$filter"];

angular.module("app", [])
.controller('EditableRowCtrl', GoodController1);
})();

正如手冊所說,Angular的模板表達式評估明確是寬容的

表達式評估對undefinednull是寬容的。 在JavaScript中,如果a不是對象,則評估abc會拋出異常。 雖然這對於通用語言有意義,但表達式評估主要用於數據綁定,通常如下所示:

 {{abc}} 

如果a undefined (或許我們正在等待服務器響應,並且很快就會定義),則顯示除了拋出異常更有意義。 如果表達式評估不是寬容的,我們必須編寫使代碼混亂的綁定,例如:

 {{((a||{}).b||{}).c}} 

類似地,在undefinednull上調用函數abc()只會返回undefined

https://docs.angularjs.org/guide/expression

Angular使用自定義表達式評估引擎,而不是Javascript。 它的語法允許Javascript的一個窄子集,但執行完全是自定義的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM