2016-04-28 2 views
1

В настоящее время я пытаюсь ссылаться на один модуль 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(){ 

    } 
})(); 

Adding something like .module('operations.setup.holiday.calendar',[]) gets rid of the error, but from what I understand this creates a new module instead of referencing the old one?

Edit: Вот является JSFiddle

+0

У вас загруженный module.js перед вашими другими файлами? – devqon

+0

@devqon Да, я думал, что это может быть проблемой, но module.js является первым загруженным. –

ответ

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

, если у вас есть этот код, отделенный во многих файлах, не использовать анонимные функции (вызов кода непосредственно вместо этого)

+0

Спасибо @Diego! Казалось, это сработало! Поэтому, если бы я хотел их разделить, я бы просто удалил закрытие анонимных функций? '(function() {})();' –

+0

да .. просто вызовите код внутри этой анонимной функции напрямую –

Смежные вопросы