【问题标题】:How to remove the # in angular? [duplicate]如何删除角度中的#? [复制]
【发布时间】:2016-01-31 01:14:29
【问题描述】:

我是第一次使用 AngularJS,并试图从 URL 中删除 #。我没有使用 NODE 或 Express。我的网站在本地运行在 MAMP 中。我使用 index.html 作为入口点,并有 2 个模板,页眉和页脚。然后,我将所有单独的页面内容保存在 about.html、contact.html 等的部分文件夹中。我尝试添加

<head>

<base href="/">

</head>

但它是说找不到 url。

我只是使用 CDN 来导入 Angular。

【问题讨论】:

    标签: javascript angularjs


    【解决方案1】:

    我找到了这个问题的答案,但它似乎与 this issue 重复。

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

    您可以使用$locationProvider.html5Mode(true) 告诉 Angular 使用 HTML5 策略(如果可用)。

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

    【讨论】:

    • @LawrenceAiello 只是出于好奇,这不是我对中间两句话所做的吗?我并不是说以消极的方式,我只是想知道我是否应该添加更多细节或什么。谢谢!
    【解决方案2】:

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

    即如果主页只包含一个链接和单词“foo”并且该链接触发 JS 将 URL 更改为 /bar 并将单词“foo”替换为“bar”然后如果浏览器直接请求/bar,您的服务器需要发送带有“bar”字样的页面(以及您的所有JS代码)。

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

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

    如果您不打算让服务器像那样运行,并且您仍然想要一个 SPA,那么请坚持使用 hashbang URL。


    一旦服务器做对了,你只需要告诉 Angular 使用 History API 而不是 hashbangs。

    $locationProvider.html5Mode(true)
    

    【讨论】:

    • 嗯,我正在重新设计一个网站,需要保持 URL 不变。这是一个简单的网站,不需要数据库或后端,但我不喜欢在每个页面中重复太多代码,所以我认为这是尝试 Angular 使用部分和模板的好机会。还有另一种方法可以做到这一点吗?我对这一切都不熟悉。
    • 使用服务器端 CMS / 模板语言。
    • 对于这个项目来说,CMS 似乎有点矫枉过正,所以我试图在客户端全部完成。另一个 JS 框架会做得更好吗?谢谢
    • 没有。任何客户端解决方案都会遇到同样的问题。如果 CMS 会过大,请使用更基本的模板系统。
    【解决方案3】:

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

    似乎任何非 HTML5 浏览器都需要它。您可以使用$locationProvider.html5Mode(true) 来尝试使用可用的 HTML5 方法。

    【讨论】:

    • 我应该把这段代码放在哪里?
    • 把它放在 Angular 的指令中。您还可以使用 it(); 进行浏览器后备。在此处查看一些示例:docs.angularjs.org/guide/$location
    猜你喜欢
    • 2015-03-13
    • 2015-09-11
    • 2015-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-07
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多