在AngularJS中使用相对路径进行服务调用

我有以下代码,在部署到测试服务器之前,它工作正常:

$scope.getUserList = function (userName) {

$http({

method: "get",

url: "GetUserList",

params: { userName: userName }

}).

success(function (data) {

$scope.users = data;

}).

error(function () {

alert("Error getting users.");

问题是我已部署到虚拟目录,并且下面的调用试图从服务器根目录访问GetUserList。这是有道理的,而且我知道许多解决方法。

我想知道的是一种 正确的 方式,该方式以可移植且可在Angular中维护的方式引用服务URL。

回答:

我建议在头部使用HTML基本标记,并对与此相关的所有路径进行编码。例如,在ASP.NET中,您可以获取对应用程序基础的引用,该引用可以是站点的根路径,也可以不是站点的根路径,因此,使用基础标记会有所帮助。奖励:它也适用于所有其他资产。

您可以具有如下基本路径:

<base href="/application_root/" />

…然后类似“ foo / bar.html”的链接实际上就是/application_root/foo/bar.html。

我喜欢使用的另一种方法是将命名链接放在标题中。我经常在一个位置有一个API根,而在其他地方有一个指令模板根。然后,在头中添加一些这样的标签:

<link id="linkApiRoot" href="/application_root/api/"/>

<link id="linkTemplateRoot" href="/application_root/Content/Templates/"/>

…然后在模块中使用$ provide获取链接href并将其公开给服务和指令,如下所示:

angular.module("app.services", [])

.config(["$provide", function ($provide) {

$provide.value("apiRoot", $("#linkApiRoot").attr("href"));

}]);

…然后将其注入到这样的服务中:

angular.module("app.services").factory("myAdminSvc", ["apiRoot", function (apiRoot) {

var apiAdminRoot = apiRoot + "admin/";

...

不过只是我的意见。为您的应用程序做最简单的事情。

以上是 在AngularJS中使用相对路径进行服务调用 的全部内容, 来源链接: utcz.com/qa/409834.html

回到顶部