我目前正在使用带有 UI-Router 的 AngularJS 进行状态管理并在后端表达。

我目前启用了 hash bang 模式,并且一直在尝试寻找一种解决方案,该解决方案允许您在地址栏中手动键入 URL,而无需使用 hash bang。

因此,例如而不是键入:

www.mysite.com/#!/page1

我希望能够打字

www.mysite.com/page1

我试过启用 html5Mode:

$locationProvider.html5Mode(true)
                 .hashPrefix('!');

但它仍然不起作用。通过上述更改,单击任何 URL 将重写并将位置从 '#!/page1' 更改为 '/page1'。这很棒。

但是,手动输入带有“/page1”的 URL 不起作用并给出无效路径错误。如果我输入它时包含哈希爆炸,即 '#!/page1' 那么它会工作,并且在页面加载后将 URL 重写为 '/page1'。

那么我在这里做错了什么?

我的状态是这样的:
state('login', {
            url: '/login',
            templateUrl: 'login.html'
        }).
   state('parent', {
            url: '/hello',
            abstract: true,
            template: '<ui-view/>'
        }).
    state('parent.home', {
            url: '',
            controller: 'SomeCtrl',
            templateUrl: 'page.html'
        }).
        state('parent.file', {
            url: '/bob',
            controller: 'SomeCtrl2',
            templateUrl: 'file.html'
        })

最佳答案

更新:
您的代码对我来说看起来不错,我失去了经验并认为这是服务器问题。

有几种方法可以处理这个问题,但据我所知,它们只是服务器端。

using AngularJS html5mode with nodeJS and Express

How do I configure IIS for URL Rewriting an AngularJS application in HTML5 mode?

您不能直接转到路由 - mywebsite.com/page1 的原因是因为 angular 应用程序本身(位于 index.html 页面上)需要拦截/引导您到 mypage。这就是为什么您看到页面本身永远不会重新加载, View 只是在您的应用程序中发生变化。您也可以通过刷新页面来测试这一点。

您需要在服务器端实现一些东西,它接受您的请求(IE:/page1)并将所有请求路由到 index.html,Angular 将负责其余的工作。

另外:当您使用 #/page1 时,您仍在请求索引页,angular 会识别 # 并相应地进行路由

编辑:附加信息

关于javascript - AngularJS + UI-Router - 在没有 HashBang 的情况下以 HTML5 模式手动输入 URL,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26286578/

10-13 00:33