AngularJS:未捕获错误:[$ injector:nomod]模块_不可用! |对模块的多重引用

时间:2016-04-28 17:15:22

标签: javascript angularjs module

我目前正在尝试在各种指令和服务中引用单个AngularJS模块,如下所示。

module.js

(function () {
    'use strict';

    angular.module('operations.setup.holidays.calendar', []);

})();

当我尝试在一个指令/服务/控制器中引用它时,它工作正常,但当我尝试引用它时,我会得到一个指令和服务:Uncaught Error: [$injector:nomod] Module 'operations.setup.holidays.calendar' is not available!

directive.js (如果这是引用'operations.setup.holidays.calendar'的唯一内容,则有效)

(function () {
    'use strict';

    angular
        .module('operations.setup.holidays.calendar')
        .directive('yearlyCalendarDirective', yearlyCalendarDirective);

    function yearlyCalendarDirective(){
        return{
          template: "<h1>Year Calendar Directive</h1>"
        };
    }
})();

service.js (添加类似的内容会导致指定错误)

(function(){
    'use strict';

    angular
        .module('operations.setup.holiday.calendar')
        .service('Calendar',Calendar);

    function Calendar(){

    }
})();
  

添加类似.module('operations.setup.holiday.calendar',[])的内容可以摆脱错误,但据我所知,这会创建一个新模块而不是引用旧模块?

修改 这是JSFiddle

1 个答案:

答案 0 :(得分:1)

根据this answer,调用匿名函数并不能保证函数将按顺序调用。

也许您可以在一个匿名函数中加载所有代码:

(function() {
  'use strict';
  angular.module('CalendarApp', []);

  angular.module('CalendarApp').directive('yearlyCalendar', function() {
    return {
      restrict: 'E',
      scope: {},
      template: '<span>Here is a YEARLY calendar</span>'
    }
  });

  angular.module('CalendarApp').directive('monthlyCalendar', function() {
    return {
      restrict: 'E',
      scope: {},
      template: '<span>Here is a MONTHLY calendar</span>'
    }
  });

  angular.module('CalendarApp').service('CalendarData', function() {
    function CalendarData() {
      vm = this;
      vm.today = new Date();
      return new CalendarData();
    }
  });
})();

如果您将此代码分隔在许多文件中,请不要使用匿名函数(直接调用代码)