Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/373.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 角度控制器代码中未定义全局函数_Javascript_Angularjs - Fatal编程技术网

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。我会继续寻找,直到我找到它,并希望回答其他用户的问题。谢谢。这与试图从外部使用函数的情况无关