全局函数未在Angular控制器代码中定义

时间:2016-05-22 14:19:30

标签: javascript angularjs

我有一个声明如下的全局函数(只有必要的位):

initiateCheckList = {};

$(function() {

    initiateCheckList = function() {
    ...
    }

然后我在Angular控制器中有一个函数试图调用该函数,但是当调用以下函数时我得到错误initiateCheckList is not defined

$scope.updateSuburbs = function () {
    $scope.suburbs.getModel($scope.areas.areaId);
    initiateCheckList();
};

此函数嵌套在控制器中,并绑定到下拉列表change,如下所示:

<select class="form-control" ng-model="areas.areaId" ng-change="updateSuburbs()">

什么是Angular,所以我无法调用全局函数,如何解决问题以便我可以调用它?

1 个答案:

答案 0 :(得分:-1)

以下是以角度定义全局属性/函数的理想方法:

“全局”变量基本上有2个选项:

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();
}

我希望它能帮助您理解在角度中添加全局属性/函数。