角度href =' /'没有解决

时间:2016-04-21 15:10:41

标签: angularjs href route-provider

我将路由配置为重定向到默认页面/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'
        });

1 个答案:

答案 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>