角度ui日历不会从注入的控制器加载

时间:2013-05-31 23:32:52

标签: angularjs requirejs angular-ui

我正在使用AngularJS和requireJS,我正在使用这个种子模板帮助我让Angular与requireJS很好地放在一起,可以在LINK

找到

目前我正在尝试将AngularUI的日历集成到项目中,但当日历代码位于 calendarCtrl.js "Cannot call method 'map' of undefined" >将示波器注入此控制器。但是,当我将代码直接放在控制器中时( controllers.js ),日历可以正常工作。

Plunkr链接:LINK

1 个答案:

答案 0 :(得分:2)

在角度中,所有范围控件的内部注射器都由应用程序初始化。您设法从控制器定义中分离您的应用程序,因此angular不知道如何注入使用$ scope对象所需的部分。

选项1

所以要让它工作,所以你需要定义一个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的目的。

选项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) {
 ...

此版本的工作人员http://plnkr.co/edit/Xo41pqEdmB9uCUsEEzHe?p=preview