从虚拟目录还是Web根目录以全局方式引用资源?

时间:2015-12-22 15:57:16

标签: html angularjs asp.net-mvc root virtual-directory

假设我有一个我在本地运行的MVC / WebAPI / AngularJS网站,例如;

本地主机/测试/

然后我想转移到

www.test.com

在本地,我有很多对以下格式的各种目录(jsfiles等)的引用(在JS或HTML文件中)

app.directive('rpdbSpinner', function() {
    return {
        restrict: 'E',
        **templateUrl: '/Test/templates/directives/spinner.html',**
        scope: {
            isLoading:'='
        }
    }
})

更新/网络发布时,我必须将所有内容更改为:

app.directive('rpdbSpinner', function() {
    return {
        restrict: 'E',
        **templateUrl: '/templates/directives/spinner.html',**
        scope: {
            isLoading:'='
        }
    }
})

我可以手动完成(这是我一直在做的),但项目越大,越难。当然,我可以只更改一次,然后在发布阶段(web.config / rest)中排除文件,但仍然感觉我的方式错误。使用"〜/"据我所知,它不会处理普通的HTML / JS文件,而且我无法真正使用它...

无论是在虚拟目录中还是在项目的根目录中,都要映射到全局路径的任何建议?

谢谢:)

3 个答案:

答案 0 :(得分:1)

如果您只是关心获取网站的根/网址,以便您可以附加该网址以获取您所关注的其他网址,则可以使用/作为网址的第一个字符。

var getUsersUrl =  "/api/users";

如果您不仅需要应用程序根目录,那么这是另一种方法(例如:特定网址(使用mvc辅助方法构建,例如Url.RouteUrl等)

您不应该像这样对应用程序基本路径进行硬编码。您可以在剃刀视图中使用Url.ContentUrl.RouteUrl辅助方法生成应用基础的网址。无论您当前的页面/路径如何,它都会正确构建网址。一旦获得此值,请将其分配给javascript变量并在其他js代码中使用该变量来构建其他网址。 在执行此操作时务必使用javascript命名空间,以避免全局javascript变量可能出现的问题。

因此,在您的剃刀视图(布局文件或特定视图)中,您可以执行此操作。

<script>
    var myApp = myApp || {};
    myApp.Urls = myApp.Urls || {};
    myApp.Urls.baseUrl = '@Url.Content("~")';    
    myApp.Urls.userListUrl = '@Url.Action("Index","User")';       
</script>
<script src="~/Scripts/NonAngularJavaScript.js"></script>
<script src="~/Scripts/AngularControllerForPage.js"></script>
<script>
    var a = angular.module("app").value("appSettings", myApp);
</script>

在角度控制器中,您可以像

一样访问它
var app = angular.module("app", []);
var ctrl = function (appSettings) {

    var vm = this;
    console.log(appSettings.Urls.userListUrl);

    vm.baseUrl = appSettings.Urls.baseUrl;
    //build other urls using the base url now
    var getUsersUrl = vm.baseUrl + "api/users";
    console.log(getUsersUrl);

};
app.controller("ctrl", ctrl)

您也可以在数据服务,指令等中访问它。

在非角度java脚本文件中。

// With the base url, you may safely add the remaining url route.
var urlToJobIndex2= myApp.Urls.baseUrl+"jobs/GetIndex";

答案 1 :(得分:0)

  

据我所知,使用“〜/”对纯HTML / JS文件不起作用,   这个我真的不能用它......

是的,但您可以将其作为变量注入服务器端主服务网页:

<script>
    var baseUrl = ... get the base url from the server using ~/
</script>

然后在外部脚本中简单地将相对URL连接起来。就静态html文件而言,它可能会有点问题。您可以通过一些特殊的服务器端处理程序为它们提供服务,这些处理程序将负责注入此逻辑。

答案 2 :(得分:0)

您可以使用SELECT compare_date , count(v.`date`) FROM ( SELECT DATE(now() - INTERVAL @nr:=@nr+1 DAY) AS compare_date FROM information_schema.COLUMNS, (SELECT @nr:=-1) AS tmp LIMIT 7 ) AS d LEFT JOIN `visitors` v ON v.`date` = compare_date GROUP BY compare_date; 创建可以使用的注射剂。

module.constant

如果您在注册指令之前注册,也可以使用app.constant("URL_BASE", "/Test"); app.directive('rpdbSpinner', function(URL_BASE) { return { restrict: 'E', **templateUrl: URL_BASE + '/templates/directives/spinner.html',** scope: { isLoading:'=' } } })

有关详细信息,请参阅AngularJS Module Guide -- configuration