在角度上,所有范围控件的内部注入器都由应用程序初始化。您设法将您的应用程序与控制器定义分离,因此 Angular 不知道如何注入使用 $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。