2015-10-30 32 views
1

我第一次使用AngularJS,并试图从URL中删除#。我没有使用NODE或Express。我在MAMP本地运行该站点。我使用index.html作为入口点,并有2个模板,页眉和页脚。然后,我保持了我所有的个人页面内容的泛音文件夹about.html,contact.html等我曾尝试加入如何删除#中的角?

<head> 

<base href="/"> 

</head> 

但它说没有找到URL。

我刚刚使用CDN导入Angular。

回答

4

这SO后提供了关于这个问题的一些非常有用的信息:AngularJS routing without the hash '#'

看来,它需要对任何非HTML5的浏览器。尽管可用,但您可以使用$locationProvider.html5Mode(true)尝试使用HTML5方法。

+0

我会在哪里放置这段代码? – jfoutch

+0

将它置于Angular的指令中。您也可以使用'it();'浏览器回退。在这里查看一些例子:https://docs.angularjs.org/guide/$location – KingCodeFish

1

如果你想使用真正的URL而不是hashbangs,那么首先使服务器返回每个url的正确内容

即如果网页包含只是一个链接和单词“foo”和链接触发JS从而改变URL来/bar和替换词“富”与“酒吧” 然后如果浏览器请求/bar直接你的服务器需要发送带有“bar”字样的页面(以及你所有的JS代码)。

这意味着您需要两次编写代码(服务器端和客户端),或者需要使用同构JavaScript(并运行服务器端JavaScript解决方案)。

这是很多工作,但这是制作健壮的单页应用程序的代价。您可能想考虑不使用SPA(通过检查成本效益)。

如果你不打算让服务器的行为像这样,你仍然想要一个SPA,然后坚持使用hashbang的URL。


一旦服务器做正确的事,你只需要告诉角成使用历史API,而不是hashbangs的。

$locationProvider.html5Mode(true) 
+0

嗯,我正在重新设计一个网站,并需要保持urls相同。这是一个简单的网站,不需要数据库或后端,但我不喜欢在每个页面中重复使用代码,所以我认为这是一个很好的机会来尝试使用Angular的部分和模板。有没有另一种方法来做到这一点?我对这一切都很陌生。 – jfoutch

+1

使用服务器端CMS /模板语言。 – Quentin

+0

一个CMS似乎对这个项目的矫枉过正,所以我试图做所有的客户端。另一个JS框架会做得更好吗?谢谢 – jfoutch

1

我找到了这个问题的答案,但它似乎是this issue的副本。

哈希路由是一种在没有完整HTML5支持的浏览器上实现客户端路由的方法。

如果可用,您可以使用$locationProvider.html5Mode(true)来指示使用HTML5策略。

答案的所有功劳都应归功于用户plus-,以便他对重复问题的回答。

+0

@LawrenceAiello出于好奇,这不是我对中间两句话做的吗?我的意思并不是消极的,我只是想知道我是否应该增加更多的细节或内容。谢谢! –