我有一个AngularAMD应用程序,我有一个指令(在RequireJS意义上)依赖于该应用程序(它是该指令"生活"的Angular模块).
如果我使用路由,并在路由视图中使用该指令,那么有一个包含controllerUrl的路由,它取决于包含该指令的文件.
如果我不这样做,那么......
嗯,这是令人沮丧的循环.如果我告诉应用程序它依赖于指令,我会得到循环依赖.如果我不这样做,Angular不知道该指令,并且标签被忽略.
没有从AngularAMD再现整个控制器解析机制,我有没有办法做到这一点?
我觉得可能有两种情况:
1)您的指令是独立的,实际上并不依赖于应用程序中的任何内容。
在这种情况下,您可以将其放入自己的模块中(无论是在 RequireJS 还是 Angular 方面):
// 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']);
Run Code Online (Sandbox Code Playgroud)
此用例受 AngularAMD 支持,请参阅第 3 方 AngularJS 模块。
2) 您的指令取决于应用程序内部的某些内容。在这种情况下 - 将其放入同一个模块中(也包括 Angular 和 RequireJS)。
// app.js
var app = angular.module('myapp', []);
app.directive('myDirective', [
...
]);
Run Code Online (Sandbox Code Playgroud)
3) [更新] 又一个解决方案:AngularAMD 还支持一种特殊情况来定义和加载应用程序范围的模块。