如何在AngularJS UI-Router中重新加载浏览器并保持当前状态?

时间:2016-07-25 18:50:28

标签: angularjs angular-ui-router

我构建了一个小型Web应用程序,我使用UI-Router来浏览其页面。除了浏览器刷新或使用状态链接访问特定页面之外,一切正常。我尝试了几个在同一主题上发布的解决方案,但由于缺乏其他信息,他们没有帮助。

当我点击下面的ui-sref链接时,我会得到“mysite / content'并且页面显示正常,但是一旦我刷新它或尝试通过粘贴链接访问它就找不到页面。

请您按照我的意愿帮助我。提前谢谢。

HTML

<p ui-sref="content">Link To Content</p>

AngularJS

var app = angular.module('myApp',['ui.router']);

app.config(['$stateProvider', '$urlRouterProvider', '$locationProvider', function($stateProvider, $urlRouteProvider, $locationProvider){


    $urlRouteProvider.otherwise('/');


    $stateProvider

        .state('home', {
            url: '/',
            views: {
                '': { templateUrl: '/app/templates/wrapper.html'},
                'nav@home': { templateUrl: '/app/templates/nav.html'},
                'header@home': { templateUrl: '/app/templates/header.html'},
                'footer@home': { templateUrl: '/app/templates/footer.html'}
            }
        })

        .state('content', {
            url: '/content',
            views: {
                '': { templateUrl: '/app/templates/content.html'},
                'nav@content': { templateUrl: '/app/templates/nav.html'},
                'header@content': { templateUrl: '/app/templates/header.html'},
                'footer@content': { templateUrl: '/app/templates/footer.html'}

            }
        });

    $locationProvider.html5Mode(true);


}])

1 个答案:

答案 0 :(得分:0)

将html5Mode设置为true,刷新页面时,浏览器会发出“mysite / content”请求。在经典的单页应用程序中,后端有一组响应某些数据的路由,并且通常配置为返回所有其他路由的应用程序index.html(例如'mysite / content')。 / p>

当您禁用html5Mode时,它会起作用,因为浏览器会在没有“#”后的部分的情况下向网址发出请求,因此您的后端肯定会返回预期的index.html。