繁体   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