如何:Angularjs 路由刷新

How to : Angularjs route refresh

我试图制作一个包含多个视图的应用程序作为模板。模板位于 js/app/pages/ 文件夹下。我有 2 个模板来显示和路由。我的路由部分是:

var app = angular.module("myApp", ['ngRoute', 'ngMaterial']);

app.config(function ($routeProvider, $locationProvider) {
    $routeProvider
    .when('/Page', {
        templateUrl: 'js/app/pages/Page.html',
        controller: 'pageController',
        reloadOnSearch: false
    })
    .when('/Settings', {
        templateUrl: 'js/app/pages/Settings.html',
        controller: 'settingsController',
        reloadOnSearch: false
    })
    .when('/Admin', {
        templateUrl: 'js/app/pages/Admin.html',
        controller: 'adminController',
        reloadOnSearch: false
    })
    .otherwise({
        redirectTo: '/Page'
    });

    $locationProvider.html5Mode(true);
});

我的 html 文件包含

<div id="menu"></div>
<div ng-view></div>

菜单 div 包含在页面之间引导我的菜单元素。例如,当我在浏览器上运行这个网站时,URL会变成localhost/Page,当我点击设置按钮时URL变成localhost/Settings。但是当我按下键盘上的 F5 按钮时。页面给我错误 The resource cannot be found..

我在互联网上搜索 "how to refresh routing page in angularjs" 并找到了一些解决方案,但我无法让它们为我工作。我尝试了 $route.reload()$routeUpdate() 方法,但这对我不起作用。也许我有什么地方错了。

当您 "reload a page" 时,您的整个应用程序将再次重新初始化。这意味着如果你不在主页上,而你的子路由丢失了一些数据,你可能会得到一个错误。

您应该查看路由的解析属性,例如,

.when('/Settings', {
        templateUrl: 'js/app/pages/Settings.html',
        controller: 'settingsController',
        reloadOnSearch: false,
        resolve: {
            resourceone: function(){return whatsneeedtoberesolvehere;}
        }
    })

这样无论您的应用程序在何处重新加载,它都将具有启动页面所需的数据

实际上,当您从键盘按 F5 时,它会访问该页面的服务器,而不是 angular,因为您的 URL 之间没有任何 # 符号.对于 angular,URL 应该像 - localhost/#/Page

使用 html5 模式

关于它的一篇很棒的文章here

初始化非常简单

.config(function($routeProvider, $locationProvider) {

    // other routes here

    $locationProvider.html5Mode(true);

});

如果您使用的是 Apache 服务器,这应该可以在终端中运行运行

sudo a2enmod rewrite && sudo service apache2 restart

适合我

只需保留 URL 中的 #,您不必花费额外的精力来管理重新加载等。您可以认为 URL 中的“#”代表单个页面中的特定状态申请。

否则,它可以通过模块重写来管理,即在内部为 AngularJs 应用映射 url 和散列版本 URL。

已解决!我无法使用 ngRoute 管理刷新。然后我将它转换成 ui-router。我通过 url 声明状态。刷新正在工作。感谢您的评论和回答。也许这会对某人有所帮助。