我有以下示例:https://jsfiddle.net/vr0dkwrh/1/
基本上,我正在调用范围内不存在的函数。为什么浏览器中没有显示错误? (我已经使用Firefox 38.1和IE 11进行了测试)。
当主播“点击我”时单击,将调用go()
。
当主播点击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);
})();
答案 0 :(得分:3)
正如手册所述,Angular的模板表达式评估明确 原谅 :
表达式评估对
undefined
和null
是宽容的。在 如果a.b.c
不是,则评估a
的JavaScript会引发异常 宾语。虽然这对于通用语言是有意义的,但是 表达式评估主要用于数据绑定,其中 通常看起来像这样:{{a.b.c}}
没有什么比投掷更有意义
a
为undefined
的异常(也许我们正在等待服务器 响应,它将很快定义)。如果表达评价 不能原谅我们必须编写使代码混乱的绑定, 例如:{{((a||{}).b||{}).c}}
同样,只需在
a.b.c()
或undefined
上调用函数null
返回undefined
。
https://docs.angularjs.org/guide/expression
Angular使用自定义表达式评估引擎,而不是Javascript。它的语法允许Javascript的一个窄子集,但执行完全是自定义的。