使用BASE标记和HTML5Mode时,如何在Angular中设置根路径?

Rya*_*yan 8 angularjs

鉴于我的角色应用程序存在于<base href="/test/">目录中的基本示例,将应用程序发送回主(或根)路径的最佳方法是什么?菜单片段(下面)中的所有链接都有效,但是,"Home"链接会导致IE HomeCtrl在后续请求中重新加载应用程序(特别是).

app.js

var basic = '<h1>{{title}}</h1><p>{{body}}</p>';

var app = angular.module('website', []);

app.config( function($routeProvider, $locationProvider) {
    $routeProvider.
        when('/', { template: basic, controller: HomeCtrl }).
        when('/about', { template: basic, controller: AboutCtrl }).
        when('/experiments', { template: basic, controller: ExperimentsCtrl }).
        when('/:alias', { template: basic, controller: PageCtrl, resolve: { alias: resolveAlias } }).
        otherwise({ redirectTo: '/' });

    $locationProvider.html5Mode('true');
} );
Run Code Online (Sandbox Code Playgroud)

menu.html

<base href="/test/">
....
<div id="menu">
    <a href="./" class="btn">Home</a>
    <a href="./about" class="btn">About</a>
    <a href="./experiments" class="btn">Experiments</a>
    <a href="./unicorn" class="btn">Unicorn</a>
</div>
Run Code Online (Sandbox Code Playgroud)

更新

在IE9中,对根的每个请求都重新运行JS文件,然后两次触发路由事件.

LOG: MainCtrl Loaded!
LOG: routeChangeStart[object Arguments]
LOG: routeChangeSuccess[object Arguments]
LOG: routeChangeStart[object Arguments]
LOG: routeChangeSuccess[object Arguments]
LOG: HomeCtrl Called!
Run Code Online (Sandbox Code Playgroud)

小智 0

来自文档:

\n\n
redirectTo \xe2\x80\x93 {(string|function())=} \xe2\x80\x93 value to update $location path with and trigger route redirection.\n
Run Code Online (Sandbox Code Playgroud)\n\n

因此,浏览器重定向是您正在调用的函数的一部分。

\n\n

代替:

\n\n
{ redirectTo: '/' }\n
Run Code Online (Sandbox Code Playgroud)\n\n

尝试使用与家乡路线相同的路线:

\n\n
{ template: basic, controller: HomeCtrl }\n
Run Code Online (Sandbox Code Playgroud)\n\n

我还没有尝试过这个,因为我现在无法做到这一点,但请告诉我它是否有效。

\n