【问题标题】:How to reference documents in my website to be independent of the website location and usage location如何在我的网站中引用文档以独立于网站位置和使用位置
【发布时间】:2015-03-19 23:46:05
【问题描述】:

我对客户端开发比较陌生。我正在 [root]/Static/template.html 中创建一个引用静态 html 的 angularJS 指令。

我猜这个问题不是 angularJS 独有的。

现在我需要这个地址是相对于根的,这样无论我在哪里使用指令都可以加载它。问题是我不知道我的网站会上传到哪里,所以它可能放在 www.mysite.com/ 或者可能是 www.mysite.com/system/

我也不能使用相对路径,因为它对我使用指令的位置很敏感,所以例如如果我使用 Static/template.html,它将被网站根目录中的文档找到,但不在内部文件夹。

引用文档的正确方法是什么?

【问题讨论】:

    标签: javascript html


    【解决方案1】:

    / 开头的网址是来自root 的网址。

    所以如果你设置/Static/template.html,你可以从两个路径(www.mysite.com/www.mysite.com/system/)访问template.html

    【讨论】:

      【解决方案2】:

      如果您的静态文件夹是相对于您的应用程序部署的位置,例如:

      www.example.com/index.html
      www.example.com/Static

      www.example.com/root/index.html
      www.example.com/root/静态

      www.example.com/root/foobar-app/index.html
      www.example.com/root/foobar-app/Static

      然后您需要提取基本 url 并将其存储在某个地方。 window.location API 可以用来做到这一点。

      例如:

      <!-- index.html -->
      <!-- should probably be placed into external script file -->
      <script>
          function extractPath(url) {
              return url.match(/.*\//) // find all chars until the slash
          }
      
          var baseurl = window.location.origin + extractPath(window.location.pathname);
          window.baseurl = baseurl; // store in global scope
      </script>
      

      这个 sn-p 显示了总体思路。现在,您可以在代码的其他地方读取基本 url 路径来访问静态资源。例如:

      var image_url = window.baseurl + "Static" + image_path;
      

      在 AngularJS 中,您通常会将该变量存储在主应用程序控制器中。如果您只有一个工厂可以访问静态资源,您可以考虑将 baseurl 存储在那里。

      【讨论】:

      • 谢谢。因此,您建议执行此操作的最佳方法是将网站根目录存储在 asp.net 中,通过使用~ 将其确定到 javascript 变量中,然后将此地址添加到我们需要与 Web 应用程序相关的任何路径中root 并且独立于参考位置。
      • @Alireza 这不是一个好的解决方案,但是是的。包含静态文件路径的变量不需要存储在全局范围内。您可以将其合并到 ng-controller 或服务/工厂中。更好的方法是确保无论您的 Web 应用程序部署在何处(例如:example.com/static),始终从相同的 URL 提供静态文件。
      • 好的,很酷。顺便说一句,当我们从控制器中读取/写入服务/工厂内的变量时很容易。但是当我想在服务器生成的 html 文件中的内联脚本标记中执行此操作时,它变得不那么简单了。在那个方向上有什么提示吗?基本上我想:&lt;script ....&gt; var rootUrl = 'www.mysite.com/myapp/'; //store it in a non-gloabl varable, in angular way;非常感谢你
      • 在这种情况下,坚持使用全局变量可能没问题。或者,您可以将包含角度控制器的 JS 文件作为 JSP (java) / ASPX (.net) / ERB (rails) 提供。这样,您可以使用标签将后端变量注入前端代码。另一个想法是使用您的前端构建过程(grunt/gulp)将变量注入前端代码。
      猜你喜欢
      • 2013-11-16
      • 2012-04-18
      • 1970-01-01
      • 2011-03-22
      • 1970-01-01
      • 2011-04-07
      • 1970-01-01
      • 1970-01-01
      • 2011-11-18
      相关资源
      最近更新 更多