21

我已经工作了几个小时来获取我的链接,以便通过我的 AngularJS 应用程序点击进入不同的视图。

但是,我似乎只能获得在 Plunker 上在线工作的功能。

我一直在尝试在本地测试我的机器上的点击功能,但 ng-view 似乎没有加载。当我下载我知道是正确的 Plunker 代码时,因为它正在 Plunker 上运行,ng-view 似乎在本地托管后停止工作。

ng-include 和我定义为它们自己的 HTML 标记的指令也有类似的问题。

这些在我的计算机上不能本地工作有什么原因吗?(还有一种方法可以修复它以用于测试目的?)

如果您愿意,可以在此处查看我在 Plunker 上讨论的一些代码。

4

3 回答 3

28

两者都ng-view使用ng-includeAJAX 加载模板。问题是浏览器默认情况下不允许对位于本地文件系统上的文件的 AJAX 请求(出于安全原因)。因此,您有两种选择:

  1. 运行将为您的文件提供服务的本地 Web 服务器
  2. 告诉您的浏览器允许本地文件访问

如果你在 Mac 上,第一个选项相当简单,因为你有几个内置的 Web 服务器(Apachehttpd和 Python 模块称为SimpleHTTPServer)。要运行 PythonSimpleHTTPServer模块,只需在文件所在的文件夹中打开控制台并运行

python -m SimpleHTTPServer 3000

然后打开浏览器并输入http://localhost:3000. 而已。

如果你在 Windows 上,它也是可能的。您可以安装例如Wamp并从中提供文件。

Chrome 可以使用第二个选项,只需从命令行使用--allow-file-access-from-files选项运行它,或者将此标志添加到 Chrome 可执行文件路径后的快捷方式。

资源也可能有助于了解如何在不同的浏览器中本地运行事物并使用不同的 Web 服务器。

于 2014-06-09T16:43:28.377 回答
17

ng-view and ng-include make ajax requests to serve the template file. Because you're running it locally, it can't make that request. An easy fix around this is to use http-server to serve your contents over a local server.

于 2014-06-09T16:28:49.303 回答
4

如果您将模板放入 index.html 本身而不是使用脚本标签放入单独的文件中,ng-view 将在本地工作,因此 Angular 将不再需要发出 AJAX 请求来获取它们。

<script type="text/ng-template" id="home.html">
  This is the Home template
</script>
于 2014-12-02T05:38:26.263 回答