我们生产的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在我的控制器中获取URL(如果我可以合理地保证我将有时间在以后修复它,我愿意打破规则以便及时获得某些东西)。现在是修复它的时候了,我很茫然。
在这两种环境之间,我从@Url.Action("GetUpdates")
获得以下内容:
http://example.com/
:=> /Contest/GetUpdates
http://localhost/SubDir
:=> /SubDir/Contest/GetUpdates
如何在不使用该控制器文件中的帮助程序的情况下将依赖于环境的URL放入我的AngularJs控制器中?我原本以为它可能就像使用隐藏的输入和设置ng-model一样简单,但似乎没有用。我还研究过使用扩展RazorJS,但希望有更好的方法可以更好地使用Angular范例。
有人有什么想法吗?如何将URL导入控制器?
答案 0 :(得分:1)
如果您能够更改环境配置服务器端,则可以将变量内联在模块中。然后你可以注入你的主应用程序。
这是 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;