2013-05-31 3 views
2

Я использую AngularJS и requireJS, и я использую этот шаблон семян, чтобы помочь мне, чтобы получить угловатые красиво место с requireJS, которые можно найти здесь LINKУгловой календарь пользовательского интерфейса не будет загружаться с закачиваемого контроллером

На момент Я пытаюсь интегрировать календарь AngularUI в проект, но я продолжаю получать ошибку "Cannot call method 'map' of undefined", когда код календаря находится в calendarCtrl.js с областью, введенной в этот контроллер. Однако, когда я размещаю код непосредственно в контроллере (controllers.js), календарь работает.

Plunkr ссылка: LINK

+0

У вас есть версия плункера, что вы хотели бы иметь работу, но не так ли? Было бы намного проще помочь вам отладить эту версию. –

+0

Код, который не работает, уже был там, но прокомментирован. Я отредактировал так, чтобы он просто включал код, который не работает. Основными страницами, на которых нужно сосредоточиться, являются controllers.js и calendarCtrl.js. – Malcr001

ответ

2

В угловых внутренних инжекторах для всех элементов управления областью видимости инициализируется приложением. Вам удалось отделить приложение от определения вашего контроллера, поэтому угловые не знали, как вводить части, необходимые для использования объекта $ scope.

Вариант 1

Таким образом, чтобы получить эту работу, так что вы должны либо определить приложение/модуль, который получают передаваемый в пространство, где определен контроль: контроль

define(['angular'], function (angular) { 
    'use strict'; 

    return angular.module('TP.controllers', []); 
}); 

календаря:

define([ 
    "jquery", 
    "controllers", 
     "jqueryui", 
     "full_calendar", 
     "calendar", 
    ], 
    function($, controllers) { 
     return controllers 
     .controller('calendarCtrl', ['$scope', function($scope) { 
.... 

В этом случае вам необходимо включить каждый отдельный контроллер в приложение верхнего уровня, например:

define([ 
    'angular', 
     'controllers', 
    'calendarCtrl', 
     'full_calendar', 
     'calendar' 
    ], function (angular, controllers) { 
     'use strict'; 

     return angular.module('TP', ['TP.controllers', 'ui.calendar']); 
}); 

Это в какой-то степени поражает цель использования AMD.

Вариант 2

Лучшим вариантом является определение календаря, как это собственный модуль затем определить его как ребенка контроллеров. Это поддерживает угловую цепь впрыска, поэтому область применения имеет надлежащий контекст при инициализации действий календаря.

Определение корня контроллеры:

define(['angular', 'calendarCtrl'], function (angular) { 
    'use strict'; 

    return angular.module('TP.controllers', ['calendarCtrl']); 
}); 

Определение календаря контроллера:

define([ 
    "jquery", 
    "angular", 
     "jqueryui", 
     "full_calendar", 
     "calendar", 
    ], 
    function($, angular) { 
     return angular.module('calendarCtrl', []) 
      .controller('calendarCtrl', ['$scope', function($scope) { 
... 

Работа plunker этой версии на http://plnkr.co/edit/Xo41pqEdmB9uCUsEEzHe?p=preview.

+0

Извинения за то, что не вернулись к вам раньше, ваша помощь очень ценится. Когда я интегрирую это в свой проект, это не сработает. На следующий день или два я попытаюсь получить версию, отображающую ошибку на plunkr. – Malcr001

+0

Спасибо, что помогли мне. Проблема, которую я реализовал в моем проекте, заключалась в конфликте с существующей угловой библиотекой пользовательского интерфейса, которую я имел в проекте. Я удалил это и его работу. Теперь мне просто нужно выяснить, как обновить переменную родительских контроллеров от контроллера календаря, потому что этот календарь должен быть отделен от формы. Есть идеи? – Malcr001

+0

Вы можете передать область контроля из родительского объекта, который вы хотите изменить, с помощью области действия '=' operator: scope {parentVar: '='}. Затем в вашем контроллере календаря вы просто обновляете 'scope.parentVar.value1 = 'some value'', это затем будет отражать элемент, который вы передали из своей директивы. Примером этого является http://stackoverflow.com/questions/14219770/in-an-angularjs-directive-how-do-i-set-a-parent-controllers-property. –

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