Javascript 在指令中包含js库文件的正确方法,避免可能更改的相对路径

Javascript 在指令中包含js库文件的正确方法,避免可能更改的相对路径,javascript,angularjs,Javascript,Angularjs,我有一个项目,它没有使用任何方法来包含角代码,而是直接将它们加载到我们的html页面中(并且在一段时间内不会从我的经理那里获得包含任何工具的许可) 目前,如果我想使用提供的javascript/angular/bootstrap元素,我只需将其包含在index.html中,如下所示: <script type="text/javascript" src="../lib/angular/angular-file.js"/> 我现在正在写一份指令。在html模板中,我想使用已经编写

我有一个项目,它没有使用任何方法来包含角代码,而是直接将它们加载到我们的html页面中(并且在一段时间内不会从我的经理那里获得包含任何工具的许可)

目前,如果我想使用提供的javascript/angular/bootstrap元素,我只需将其包含在index.html中,如下所示:

<script type="text/javascript" src="../lib/angular/angular-file.js"/>

我现在正在写一份指令。在html模板中,我想使用已经编写的第三方Angle指令来提供树视图。因此,我希望在我的指令html模板中包含此脚本,以确保它已加载,而不是相信index.html已经加载了脚本

但是,我不想使用相对路径,或者至少我担心这样做会导致我的指令稍后中断。我的指令的html模板隐藏在树结构下,类似于“portal/modules/simulation/templates/which”,我不想在模板中放置“../../../../../../../../lib”,因为它很难看,但也因为我们可能会移动角度文件,我不想让它破坏我的指令

是否有一种更干净的方法来包含库,而不必假定文件结构的多层结构,以及与我的文件结构的“顶层”相关的某种工作方式等


我的指令拥有自己的包含第三方angular指令的lib目录,而不是作为共享lib目录的一部分,这被认为是干净的吗?对于这一点,我认为我使用的第三方树状视图指令依赖于其他angular和jquery代码,因此我不知道我是否会意外地依赖于顶级index.html文件中的某些内容,加载指令使用的一些angular/jquery代码而没有意识到这一点。当我不应该让指令独立时,我是否过于担心了?

通常我使用grunt和。如果您使用类似的方法,您可以将模板引用为
myModule/fileNameOfTemplate
,并且由于模板已经在内存中(使用
$templateCache
),因此您不需要发出任何额外请求,代码也不关心实际文件的路径

无需添加额外的模块、构建步骤等

foo.js

var fooModule = angular.module('foo', []);
fooModule.run(['$templateCache', function ($templateCache) {
  $templateCache.put("foo/mytemplate.hmtl", "Really" +
                     "really" +
                     "long" +
                     "string");
}])
fooModule.directive('bar', function () {
    return {
        templateUrl: 'foo/mytemplate.html'
    }
});
现在,将模块存储在何处并不重要,只需将文件从模板缓存中拉出即可


或者,templateUrl可以接受一个函数-您可以编写一个函数来确定模块的路径或其他内容。。但这将是非常脆弱的。

通常我使用grunt和。如果您使用类似的方法,您可以将模板引用为
myModule/fileNameOfTemplate
,并且由于模板已经在内存中(使用
$templateCache
),因此您不需要发出任何额外请求,代码也不关心实际文件的路径

无需添加额外的模块、构建步骤等

foo.js

var fooModule = angular.module('foo', []);
fooModule.run(['$templateCache', function ($templateCache) {
  $templateCache.put("foo/mytemplate.hmtl", "Really" +
                     "really" +
                     "long" +
                     "string");
}])
fooModule.directive('bar', function () {
    return {
        templateUrl: 'foo/mytemplate.html'
    }
});
现在,将模块存储在何处并不重要,只需将文件从模板缓存中拉出即可


或者,templateUrl可以接受一个函数-您可以编写一个函数来确定模块的路径或其他内容。。但这将是非常脆弱的。

我完全同意grunt可以解决这个问题。不幸的是,我不能使用grunt,我的经理考虑将其配置为“重构”,并说我们没有时间。我…不同意,但这不是我的决定。嗯,这只是让模板整洁而已。我将使用“更多到核心”的想法进行编辑。@dsollen您必须在服务器端执行此操作。考虑到您有一个带有“portal/modules/simulation/templates/whatever”路径的变量,您应该在构建时(Grunt)或运行时(PHP,Express w/view templates,whatever)将其应用于索引文件。因为您还没有指定服务器端设置的详细信息,所以答案是最好的选择。我完全同意grunt可以解决这个问题。不幸的是,我不能使用grunt,我的经理考虑将其配置为“重构”,并说我们没有时间。我…不同意,但这不是我的决定。嗯,这只是让模板整洁而已。我将使用“更多到核心”的想法进行编辑。@dsollen您必须在服务器端执行此操作。考虑到您有一个带有“portal/modules/simulation/templates/whatever”路径的变量,您应该在构建时(Grunt)或运行时(PHP,Express w/view templates,whatever)将其应用于索引文件。因为您还没有指定服务器端设置的详细信息,所以答案是最好的选择。