javascript - 如何将环境特定的 URL 获取到我的 AngularJS Controller 中?

标签 javascript jquery asp.net-mvc angularjs razor

情况

我们生产中的 Web 项目有一个根 URL,如下所示:http://example.com。我们的本地开发实例(不要问我为什么)默认为如下 URL:http://localhost/SubDir 其中 SubDir 是 IIS 中实际虚拟子目录的占位符。

这不是问题。尽管我很想废除子目录 URL 的东西,但这只是说明了一个问题。如果我们稍后要移动到包含子目录 URL 的不同域或 URL,那么对于我们使用帮助程序生成 URL 的代码中的所有实例(例如 @Url.Action("GetUpdates") 等)。

目前,我们有相当多的 javascript 已移至外部 .js 文件,这些文件使用 jQuery 从隐藏输入中获取 URL 字符串,这些输入的值已设置为如上所述的 Url 帮助程序。这还不错,它有效。

问题

AngularJs。这不是问题。但它却暴露了问题。我们希望最终从项目中删除 jQuery。现在,我正在使用 jQuery 获取 Controller 中的 URL(如果我可以合理地确信稍后将有时间修复它,我愿意打破规则以努力按时完成某些内容)。现在是时候修复它了,我不知所措。

在这两个环境之间,我从 @Url.Action("GetUpdates") 得到以下内容:

  • http://example.com/ 上:=> /Contest/GetUpdates
  • http://localhost/SubDir 上:=> /SubDir/Contest/GetUpdates

问题

如何在不使用 Controller 文件中的帮助程序的情况下将环境相关的 URL 获取到我的 AngularJs Controller 中?我最初认为这可能就像使用隐藏输入和设置 ng-model 一样简单,但似乎不起作用。我还考虑过使用扩展 RazorJS,但希望有更好的方法来使其更符合 Angular 范例。

大家有什么想法吗?如何将 URL 获取到 Controller 中?

最佳答案

如果您能够更改服务器端的环境配置,您可以将变量内联到模块常量中。然后您可以注入(inject)到您的主应用程序中。

这是一个 Plunker

// inline
angular.module('Preload',[]).contstant('CONFIG', {'BASE_URL':'http://localhost/foo'});

// inject
var app = angular.module('MainApp', ['Preload']);

// Controller
app.controller('MainCtrl', function($scope, CONFIG) {
  $scope.base_url = CONFIG.BASE_URL;

关于javascript - 如何将环境特定的 URL 获取到我的 AngularJS Controller 中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27517406/

相关文章:

javascript - jQuery - 不适用于输入类型搜索

单击 li 时 Jquery addclass 不起作用

asp.net - ASP.NET Web应用程序(.NET Framework)与ASP.NET Core Web应用程序(.NET Framework)

javascript - 比较 2 个对象数组并用 id 替换对象

javascript - 为什么我的 Canvas 除了 Angular 落外都是空白的?

javascript - 根据内容选择 css 类

javascript - Node Js、Async Js、Listener 必须是函数

javascript - datepicker beforeShowDay 返回 3 个月

asp.net-mvc - Html.ValidationSummary 和 Ajax.BeginForm 最佳实践

asp.net - 将 .aspx 网站转换为 ASP.NET Core