2014-02-17 163 views
1

AngularJS部件我實施基於Dan Wahlin's article一個角/ RequireJS路由解決方案。註冊經由提供商

在這篇文章中,丹使他的應用程序對象以下寄存器快捷鍵:

app.register = 
{ 
    controller: $controllerProvider.register, 
    directive: $compileProvider.directive, 
    filter: $filterProvider.register, 
    factory: $provide.factory, 
    service: $provide.service 
}; 

當我使用這些,我可以正確地註冊,並通過RequireJS調用引用我的控制器,但如果我用traditionall app.controller()angular.module('myApp').controller()語法,然後Angular找不到它們,並從路由器中收到錯誤。

如何定義控制器,指令等不同的上述方法,爲什麼它有RequireJS在哪裏工作更傳統的方法沒有?

任何想法?

謝謝, -Nate

回答

0

由於控制器被動態地添加的東西必須從「規範」改變一個位(不幸的是)。主要區別在於控制器被封裝在RequireJS模塊中,被動態下載,然後被註冊。 $ controllerProvider.register允許動態註冊。這絕對不是正常的技術,但在這種情況下需要什麼。這就是爲什麼「應用程序」(它是將我們導入應用程序的AngularJS模塊的RequireJS模塊)被傳遞到所有控制器模塊。它公開了上面顯示的控制器屬性,它可以「即時」處理註冊。

如果動態地下載一個控制器腳本,然後使用普通的技術將無法正常進行註冊(angular.module(「..」)控制器(..)。) - 至少是這樣的話最後我試過了。我已經嘗試了幾個月,但我仍然認爲同樣的行爲仍然存在。

底線是,當控制器(以及其他項目,如服務/工廠)具有「實時」加載的腳本時,事情會有所改變,您訪問和註冊這些項目的方式會改變,都習慣於看。

+0

丹,任何想法*爲什麼*標準技術將無法正常工作?它不使用提供者嗎?我試圖理解爲什麼背後的情況,以便如果有其​​他差異,我們爲他們做好準備。對app.module('app').control()'和'$ controllerProvider.register()'之間的技術差異有什麼想法? –