我将路由配置为重定向到默认页面/patients
,否则会将用户发送到/login
。目前,如果我导航到localhost:<port>
,我会获得默认页面。问题源于想要用href =&#39; /&#39;点击徽标。当我这样做时,它不会调用resolve函数。它本质上不呈现任何内容,并删除了要在身份验证后面生活的页面元素。
配置错误了吗?谁能告诉我这里发生了什么?如果您需要更多信息,请告诉我。感谢。
app.config(['$routeProvider', function ($routeProvider) {
$routeProvider.
when('/patients', {
templateUrl: '/templates/dashboard.html',
requireLogin: true,
resolve: {
auth: function (SessionService) {
SessionService.resolve()
}
}
}).
when('/', {
redirectTo: '/patients'
}).
otherwise({
redirectTo: '/login'
});
答案 0 :(得分:2)
您需要将链接添加到&#39;#/&#39;因为你的角度路由工作在hashbang模式。有关hasgband模式和HTML5模式的更多详细信息,请查看此thread。如果你想摆脱&#39;#&#39;从您的路线尝试启用HTML5模式。代码将链接到这个:
app.config(['$routeProvider', '$locationProvider' function ($routeProvider, $locationProvider) {
$routeProvider.
when('/patients', {
templateUrl: '/templates/dashboard.html',
requireLogin: true,
resolve: {
auth: function (SessionService) {
SessionService.resolve()
}
}
}).
when('/', {
redirectTo: '/patients'
}).
otherwise({
redirectTo: '/login'
});
$locationProvider
.html5Mode(true)
}])
请注意,启用HTML5模式后,直接角度链接可能无法正常工作。您必须稍微更改服务器配置以重写指向应用程序中入口点的链接。如果您使用的是ASP.NET,请在web.config中添加重写规则。在system.webServer部分
下添加<rewrite>
<rule name="HTML5 Compatible Mode" stopProcessing="true">
<match url=".*" />
<conditions>
<add input="{REQUEST_FILENAME}" matchType="IsFile" negate="true" />
<add input="{REQUEST_FILENAME}" matchType="IsDirectory" negate="true" />
<add input="{REQUEST_URI}" pattern="^/(api)" negate="true" />
</conditions>
<action type="Rewrite" url="/" />
</rule>
</rewrite>