AngularJs在链接中没有#标签的路由?

时间:2013-12-02 18:30:05

标签: node.js angularjs single-page-application angularjs-routing

我最近开始学习AngularJs进行网页开发,到目前为止我很喜欢它。但是,在视图之间进行路由时,我不太确定是否有带有链接的主题标签。我主要担心的是Google将如何缓存网站上的网页以及这些链接是否可以双向工作,即用户是否可以点击www.sampledomain.com/#/orders/450直接进入订单页面。这是一个没问题的方法,还是有办法在没有主题标签的情况下路由视图?

当我删除主题标签时,重新加载页面并获得404错误。任何人都可以给我一个正确的解释。感谢

3 个答案:

答案 0 :(得分:1)

  

当我删除主题标签时,重新加载页面并获得404错误

那是因为在您的服务器端代码中,您可能没有处理像“www.sampledomain.com/orders/450”这样的请求

您可以让服务器端代码处理此请求,方法是将重定向返回到新URL(“www.sampledomain.com/#/orders/450”)或直接返回正确的HTML。 “正确”的解决方案将取决于您的需求。

答案 1 :(得分:0)

  1. 用户只需点击带有主题标签的链接,就可以直接进入订单页面。

  2. 当内容不同时,Google会将带有主题标签的链接视为不同的网址。它更多的是关于SEO然后angular.js,但这里有一篇文章:The First Link Counts Rule and the Hash Sign - Does it Change PR Sculpting?

答案 2 :(得分:0)

您可能希望将Angular的$locationProvider设置为使用html5Mode。

FTA: $ location服务有两种配置模式,用于控制浏览器地址栏中URL的格式:Hashbang模式(默认)和HTML5模式,该模式基于使用HTML5 History API。应用程序在两种模式下都使用相同的API,$ location服务将使用适当的URL段和浏览器API来促进浏览器URL更改和历史记录管理。

html5Mode将在现代浏览器中为您提供“普通”网址,同时在旧浏览器上回归哈希爆炸。

html5Mode网址:

http://foo.com/bar?baz=23#baz

一个hashbang网址:

http://foo.com/#!/bar?baz=23#baz