现在最好的方法是使用模块加载器,如 browserify、webpack 或 typescript。还有很多其他的。由于可以从文件的相对位置生成要求,并且能够通过转换或像 partialify 这样的加载器导入模板的额外好处,您甚至不必再使用模板 url。只需通过 require 内联模板即可。
我的旧答案仍然可以在下面找到:
我写了一篇关于这个主题的帖子,并在我们当地的 Angular Meetup 上发表了演讲。我们大多数人现在都在生产中使用它。
只要您的文件结构在您的模块中有效地表示,它就非常简单。这是解决方案的快速预览。全文链接如下。
var module = angular.module('myApp.things', []);
var all = angular.module('myApp.things.all', [
'myApp.things',
'things.someThing',
'things.someOtherThing',
'things.someOtherOtherThing',
]);
module.paths = {
root: '/path/to/this/thing/',
partials: '/path/to/this/thing/partials/',
sub: '/path/to/this/thing/sub/',
};
module.constant('THINGS_ROOT', module.paths.root);
module.constant('THINGS_PARTIALS', module.paths.partials);
module.constant('THINGS_SUB', module.paths.sub);
module.config(function(stateHelperProvider, THINGS_PARTIALS) {
stateHelperProvider.setNestedState({
name: 'things',
url: '/things',
templateUrl: THINGS_PARTIALS + 'things.html',
});
});
然后任何子模块或“相对”模块看起来像这样:
var module = angular.module('things.someThing', ['myApp.things']);
var parent = angular.module('myApp.things');
module.paths = {
root: parent.paths.sub + '/someThing/',
sub: parent.paths.sub + '/someThing/sub/',
partials: parent.paths.sub + '/someThing/module/partials/',
};
module.constant('SOMETHING_ROOT', module.paths.root);
module.constant('SOMETHING_PARTIALS', module.paths.partials);
module.constant('SOMETHING_SUB', module.paths.sub);
module.config(function(stateHelperProvider, SOMETHING_PARTIALS) {
stateHelperProvider.setNestedState({
name: 'things.someThing',
url: "/someThing",
templateUrl: SOMETHING_PARTIALS + 'someThing.html',
});
});
希望这可以帮助!
全文:相对 AngularJS 模块
干杯!