1

当我做

/sites/all/themes/theme/js/controller.js

$scope.template = 'partials/tpl.html'

/sites/all/themes/theme/js/index.html

<div ng-include='template'></div>

/sites/all/themes/theme/js/partials/tpl.html

<b>Ho boy!</b>

我基本上将与 angular 相关的所有内容都移到了 js 文件夹中。

localhost/partials/tpl.html会在我需要时返回localhost/sites/all/themes/js/partials/tpl.html。如何在不使用绝对路径的情况下解决这个问题?

4

2 回答 2

4

我使用 $httpProvider.interceptors 解决了这个问题。以下将“myAppDirectory”添加到所有请求。

$httpProvider.interceptors.push(function($q) {
    return {
     'request': function(config) {
         config.url = 'myAppDirectory/'+config.url;
         return config;
      },
    };
  });

一个常规的 ng-include,例如:

<div ng-include="'user/info.html'">

将加载myAppDirectory/user/info.html

你可能想要做一些例外。就我而言:

  $httpProvider.interceptors.push(function() {
    return {
     'request': function(config) {
         // ignore api calls and ui-bootstrap templates.
         if (config.url.indexOf('api')==-1 && config.url.indexOf('template')==-1) {
           config.url = 'myAppDirectory/'+config.url;
         }
         return config;
      },
    };
  });
于 2014-09-25T20:11:42.630 回答
0

在内部元素<base href="/sites/all/themes/theme/js/">的顶部添加一个.<head>index.html

<html>
  <head>
    <base href="/sites/all/themes/theme/js/">
    ...

参考

相对链接

请务必检查所有相对链接、图像、脚本等。您必须在主 html 文件 (<base href="/my-base">) 的头部指定 url 基址,或者必须使用绝对 url(以/) 到处都是,因为相对 url 将使用文档的初始绝对 url 解析为绝对 url,这通常与应用程序的根目录不同。

强烈建议使用从文档根目录启用的 History API 运行 Angular 应用程序,因为它会处理所有相关链接问题。

于 2013-08-23T06:17:42.650 回答