Javascript 角度控制器代码中未定义全局函数
我有一个全局函数,声明如下,只包含必要的位:Javascript 角度控制器代码中未定义全局函数,javascript,angularjs,Javascript,Angularjs,我有一个全局函数,声明如下,只包含必要的位: initiateCheckList = {}; $(function() { initiateCheckList = function() { ... } 然后我在一个角度控制器中有一个函数,它试图调用该函数,但我得到的错误是,调用以下函数时,initiateCheckList没有定义: $scope.updateSuburbs = function () { $scope.suburbs.getModel($s
initiateCheckList = {};
$(function() {
initiateCheckList = function() {
...
}
然后我在一个角度控制器中有一个函数,它试图调用该函数,但我得到的错误是,调用以下函数时,initiateCheckList没有定义:
$scope.updateSuburbs = function () {
$scope.suburbs.getModel($scope.areas.areaId);
initiateCheckList();
};
此函数嵌套在控制器中,并绑定到下拉更改事件,如下所示:
<select class="form-control" ng-model="areas.areaId" ng-change="updateSuburbs()">
什么是Angular这样做,以至于我不能调用全局函数,我如何解决问题以便调用它?下面是定义Angular中全局属性/函数的理想方法: 对于全局变量,基本上有两个选项:
use a $rootScope [http://docs.angularjs.org/api/ng.$rootScope][1]
use a service [http://docs.angularjs.org/guide/services][1]
$rootScope是所有作用域的父级,因此在那里公开的值将在所有模板和控制器中可见。使用$rootScope非常简单,因为您可以简单地将其注入任何控制器并更改此范围中的值。它可能很方便,但却有全局变量的所有问题
服务是可以注入任何控制器并在控制器作用域中公开其值的单例。作为单身者的服务仍然是“全球性的”,但你对这些服务的使用和公开有了更好的控制
使用服务有点复杂,但没有那么复杂,下面是一个示例:
var myApp = angular.module('myApp',[]);
myApp.factory('UserService', function() {
return {
name : 'anonymous',
printData: function() {console.log('Print Data');}
};
});
然后在控制器中:
function MyCtrl($scope, UserService) {
$scope.name = UserService.name;
UserService.printData();
}
我希望它能帮助您理解在angular中添加全局属性/函数。错误在于它没有定义还是不是函数?创建一个复制问题的演示。从控制器调用该函数应该不会有问题,您可以共享更多代码或创建plnkr吗?请参阅此测试plnkr:@NitsanBaleli您的plunker清楚地表明,没有任何基于框架的东西会阻止我的代码工作,因此我肯定在某个地方有一个自制的bug。我会继续寻找,直到我找到它,并希望回答其他用户的问题。谢谢。这与试图从外部使用函数的情况无关