能否在AngularJS表达式中调用函数?相关代码问题咨询
问题分析与解决方案
嘿,我明白你现在的困惑啦!你写的全局add()函数没法在AngularJS表达式里调用,核心原因是AngularJS的表达式只能访问当前作用域($scope)内的变量和函数,而你定义的add()是全局函数,不在Angular的作用域体系里,所以表达式找不到它。
下面给你两种解决方式,推荐第一种符合AngularJS规范的写法:
方式一:通过控制器将函数挂载到作用域(推荐)
这是AngularJS的标准做法,把函数放在控制器里并绑定到$scope,这样表达式就能正确访问到它:
<!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <script> // 先定义一个Angular模块 angular.module('myApp', []) // 再定义控制器,把add函数挂载到$scope上 .controller('myController', function($scope) { $scope.add = function() { return 5 + 5; }; }); </script> <body> <!-- 要指定对应的ng-app和ng-controller,让作用域生效 --> <div ng-app="myApp" ng-controller="myController"> <p>My first expression: {{ add() }}</p> </div> </body> </html>
方式二:访问全局函数(不推荐,仅测试用)
如果你只是出于测试想调用全局函数,可以通过$window服务来访问(因为全局变量默认挂载在window对象上),但这种写法不符合Angular的设计理念,不建议在实际项目中使用:
<!DOCTYPE html> <html> <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.6.9/angular.min.js"></script> <script> // 全局函数 function add() { return 5 + 5; } angular.module('myApp', []) .controller('myController', function($scope, $window) { // 把全局的add函数绑定到当前作用域 $scope.add = $window.add; }); </script> <body> <div ng-app="myApp" ng-controller="myController"> <p>My first expression: {{ add() }}</p> </div> </body> </html>
简单总结下:AngularJS的表达式不是直接访问全局环境的,必须通过作用域桥梁才能调用函数,所以把函数放到控制器的$scope里才是正确的打开方式~
内容的提问来源于stack exchange,提问作者user9588170
相关产品推荐
相关产品推荐

