AngularJS+;RequireJS+;面向功能的目录结构-如何在templateUrl中使用相对路径?
我看到过很多帖子建议在angular中为每个特性使用一个目录。今天我将RequireJS(AMD)添加到我正在开发的一个新的angular应用程序中。我在AngularJS+;RequireJS+;面向功能的目录结构-如何在templateUrl中使用相对路径?,angularjs,requirejs,amd,angular-ui-router,Angularjs,Requirejs,Amd,Angular Ui Router,我看到过很多帖子建议在angular中为每个特性使用一个目录。今天我将RequireJS(AMD)添加到我正在开发的一个新的angular应用程序中。我在body标签的末尾使用了script标签,然后我做了一些AMD重组,一切都神奇地改善了300% 这一切都很顺利,AMD风格的在处理JS文件时需要支持相对路径,但是使用templateUrl,它从根目录开始,而不是从我所在的目录开始。我见过类似于阅读“”的解决方案,我怀疑这种方法是否适用于AMD 有什么我不知道的把戏可以从某处穿过这条路吗?我不介
body
标签的末尾使用了script
标签,然后我做了一些AMD重组,一切都神奇地改善了300%
这一切都很顺利,AMD风格的在处理JS文件时需要支持相对路径,但是使用templateUrl
,它从根目录开始,而不是从我所在的目录开始。我见过类似于阅读“”的解决方案,我怀疑这种方法是否适用于AMD
有什么我不知道的把戏可以从某处穿过这条路吗?我不介意对每个文件做一些工作,但我真的不想在我使用templateUrl
的任何地方做类似templateUrl:baseUrl+'template.view1.html'
的事情
如果有必要的话,我正在使用ui路由器(第一天,耶)。我正在使用类似的东西
angular.module('...', ['...'])
.constant('basePath', 'app/path/to/something/')
后来
templateUrl: basePath + 'morePath/myFile.html',
我有一个小项目,尝试将RequireJS和Angular混合在一起。我在其中编写了templateCache
AMD插件,作为:
require(['templateCache!./navbar.html',...], function(navbarTemplate, ...) {...});
因此,加载了正确的模板(使用RequireJS的text!
插件,因此也可以使用r.js进行编译)。您得到的对象(上例中的navbertemplate
参数)有两个属性,一个是实际加载的文本,另一个是URL,文本在URL下注册到Angular的templateCache
。然后,您可以将其用作:
require(['templateCache!./navbar.html',...], function(navbarTemplate, ...) {
...
// will give you the correct URL, with `./` expanded properly
// the text is already registered with Angular
templateUrl: navbarTemplate.path
...
});
不幸的是,我还没有开始使angular require lazy与ui路由器兼容,所以您不能按原样使用它。插件的代码(非常小)可能会让您对自己实现此功能有所了解:
define(["module", "./currentModule"], function(module, currentModule) {
"use strict";
/** RequireJS module loader entry point. */
function load(name, parentRequire, onload, config) {
parentRequire(["text!" + name], function(t) {
if( !config || !config.isBuild ) {
currentModule.run(["$templateCache", function($templateCache) {
$templateCache.put(name, t);
}]);
}
onload({
text: t,
path: name
});
});
}
return {
load: load
};
});
(当前模块是特定于角度要求的,您必须至少用当前角度模块替换它。)如何使用require.toUrl(…)
看看官方文档:好的一面是,您可以使用依赖注入。这在我的三行示例中是不可见的,但对感兴趣的读者来说:-还有一个侧面的注意:当然,也可以使用工厂,从中获得可能更动态的值。对我来说,常量方法工作得很顺利。每次使用templateUrl
时,我都必须记住将基本路径粘附到相对路径,并分别传递每个功能目录的路径,因为我选择了面向功能的目录结构。我希望有更干净的东西。这是一个好方法,但我真的希望避免所有这些模板的要求污染文件的顶部。我现在意识到我可以用文本的相对路径来工作代码>插件(直到现在我才知道,我才开始使用r.js)是的,重新审视你的案例,可能需要文本/html,然后将其用作模板:file
。