我正在使用AngularJS和requireJS,我正在使用这个种子模板帮助我让Angular与requireJS很好地放在一起,可以在LINK
找到目前我正在尝试将AngularUI的日历集成到项目中,但当日历代码位于 calendarCtrl.js "Cannot call method 'map' of undefined"
>将示波器注入此控制器。但是,当我将代码直接放在控制器中时( controllers.js ),日历可以正常工作。
Plunkr链接:LINK
答案 0 :(得分:2)
在角度中,所有范围控件的内部注射器都由应用程序初始化。您设法从控制器定义中分离您的应用程序,因此angular不知道如何注入使用$ scope对象所需的部分。
所以要让它工作,所以你需要定义一个app / module,它被传递到定义控件的空间:
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的目的。
更好的选择是将日历定义为自己的模块,然后将其定义为控制器的子项。这样可以保持角度注入链,因此在初始化日历操作时,范围具有适当的上下文。
定义控制器根目录:
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) {
...
此版本的工作人员http://plnkr.co/edit/Xo41pqEdmB9uCUsEEzHe?p=preview。