2013-05-31 28 views
2

加載我使用AngularJS和requireJS,我用這個種子模板來幫助我獲得角與這裏可以LINK角UI日曆將不會從注入控制器

發現在requireJS很好的地方一刻我試圖將AngularUI的日曆整合到項目中,但當日歷代碼爲calendarCtrl.js時,我一直收到錯誤"Cannot call method 'map' of undefined",並將範圍注入此控制器。但是,當我將代碼直接放入控制器(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) { 
... 

http://plnkr.co/edit/Xo41pqEdmB9uCUsEEzHe?p=preview工作的這個版本plunker。

+0

道歉不盡快回復您的幫助,非常感謝。當我將其整合到我的項目中時,它不起作用。在接下來的一兩天內,我將嘗試在plunkr上很快得到一個顯示錯誤的版本。 – Malcr001

+0

謝謝你幫助我。我在項目中實現了這個問題是爲了解決我在項目中存在的現有角度UI庫的衝突。我刪除了它的工作。現在我只需要弄清楚如何從日曆控制器更新父控制器變量,因爲這個日曆應該是一個形式的分開..有任何想法? – Malcr001

+0

您可以使用作用域'='運算符'scope:{parentVar:'='}從您想要修改的父級傳入一個控制區域。然後,在日曆控制器中,您只需更新'scope.parentVar.value1 ='some value'',這將反映到您從指令中傳入的項目中。一個例子是在http://stackoverflow.com/questions/14219770/in-an-angularjs-directive-how-do-i-set-a-parent-controllers-property。 –