2016-01-22 69 views
9

我有一個AngularAMD應用程序,並且有一個指令依賴於(在RequireJS意義上)該應用程序(它是該指令「生活」的Angular模塊)。如何在沒有路徑的情況下使用AngularAMD

如果我使用路由,並在路由視圖中使用指令,那麼存在一個包含controllerUrl的路由,該路由取決於包含該指令的文件。

如果我不這樣做,那麼...

嗯,它是令人生氣的圓形。如果我告訴應用程序它依賴於指令,我會得到循環依賴。如果我不這樣做,Angular不知道這個指令,而標籤只是被忽略了。

從AngularAMD中再現整個控制器解析機制的缺點,有沒有一種方法可以做到這一點?

+0

爲什麼指令依賴於應用程序?我沒有使用RequireJS,但它看起來不對。也許這是應用程序應該取決於指令?所以如果你加載一個應用程序,該指令就會加載它。如果您發佈一些代碼來重現問題,那麼理解這個問題也會更容易一些。 –

+0

指令必須位於模塊中 - 應用程序就是該模塊。 – Malvolio

回答

3

我認爲可以有兩種情況:

1)你的指令是獨立的和實際上並不依賴於任何應用。

在這種情況下,你可以把它變成自己的模塊(無論是在RequireJS和角度而言):

// my-directive.js 
var module = angular.module('my-directive', []); 

module.directive('myDirective', [ 
    ... 
]); 

// app.js (depends on my-directive.js) 
var app = angular.module('myapp', ['my-directive']); 

這個用例是由AngularAMD支持,看到3rd Party AngularJS Modules

2)您的指令取決於應用程序內的某些內容。在這種情況下 - 把它放到同一個模塊中(同樣在角度和RequireJS方面)。

// app.js 
var app = angular.module('myapp', []); 

app.directive('myDirective', [ 
    ... 
]); 

3)[更新]還有一種溶液:AngularAMD也支持的特殊情況來定義和負載an application wide module

+0

在這兩種情況下,當我加載應用程序時,我需要加載指令的所有代碼,這會破壞使用Require的要點。 – Malvolio

+0

@Malvolio你的意思是說,在這兩種情況下,app.js和directive.js都將從頭開始加載?你想它像「只加載app.js和只在必要時加載directive.js」? –

+0

@Malvolio實際上AngularAMD支持加載第三方模塊,請參閱[this](https://github.com/marcoslin/angularAMD#3rd-party-angularjs-modules),所以如果你把你的指令放到單獨的模塊中(方法1) ,它應該工作。在[documentation](https://github.com/marcoslin/angularAMD#loading-application-wide-module)中還有一個特殊的用例,它看起來像你想要的。 –

相關問題