8

鉴于我在目录中的 Angular 应用程序的基本示例,将应用<base href="/test/">程序发送回主(或根)路径的最佳方法是什么?菜单片段(如下)中的所有链接都有效,但是,“主页”链接会导致 IEHomeCtrl在后续请求中重新加载应用程序(具体而言)。

应用程序.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');
} );

菜单.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>

更新

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

LOG: MainCtrl Loaded!
LOG: routeChangeStart[object Arguments]
LOG: routeChangeSuccess[object Arguments]
LOG: routeChangeStart[object Arguments]
LOG: routeChangeSuccess[object Arguments]
LOG: HomeCtrl Called!
4

1 回答 1

0

从文档:

redirectTo – {(string|function())=} – value to update $location path with and trigger route redirection.

所以浏览器重定向是你调用的函数的一部分。

代替:

{ redirectTo: '/' }

尝试使用与主路由相同的方法:

{ template: basic, controller: HomeCtrl }

我没有尝试过这个,因为我现在还不能这样做,但如果它有效,请告诉我。

于 2013-05-12T14:41:24.260 回答