假设我有一个我在本地运行的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文件,而且我无法真正使用它...
无论是在虚拟目录中还是在项目的根目录中,都要映射到全局路径的任何建议?
谢谢:)
答案 0 :(得分:1)
如果您只是关心获取网站的根/网址,以便您可以附加该网址以获取您所关注的其他网址,则可以使用/作为网址的第一个字符。
var getUsersUrl = "/api/users";
如果您不仅需要应用程序根目录,那么这是另一种方法(例如:特定网址(使用mvc辅助方法构建,例如Url.RouteUrl
等)
您不应该像这样对应用程序基本路径进行硬编码。您可以在剃刀视图中使用Url.Content
或Url.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。