如何使用AngularJS重新加载或重新呈现整个页面

在基于多个用户上下文呈现整个页面并发出多个请求后,我希望用户能够切换上下文并再次重新呈现所有内容(重新发送所有请求等)。如果我只是将用户重定向到其他地方,事情就会正常工作:$http$http

$scope.on_impersonate_success = function(response) {
  //$window.location.reload(); // This cancels any current request
  $location.path('/'); // This works as expected, if path != current_path
};

$scope.impersonate = function(username) {
  return auth.impersonate(username)
    .then($scope.on_impersonate_success, $scope.on_auth_failed);
};

如果我使用 ,则某些正在等待响应的请求将被取消,因此我无法使用它。此外,黑客也不起作用(没有任何反应)。$window.location.reload()$httpauth.impersonate(username)$location.path($location.path())

有没有另一种方法可以重新呈现页面,而无需再次手动发出所有请求?


答案 1

对于记录,要强制角度重新呈现当前页面,可以使用:

$route.reload();

根据AngularJS文档

使$route服务重新加载当前路由,即使$location未更改也是如此。

因此,ngView 会创建新的作用域,重新实例化控制器。


答案 2

$route.reload()将重新初始化控制器,但不初始化服务。如果要重置应用程序的整个状态,可以使用:

$window.location.reload();

这是一个标准的 DOM 方法,您可以通过注入$window服务来访问该方法。

如果要确保从服务器重新加载页面,例如,当您使用Django或其他Web框架并且想要一个新的服务器端呈现时,请作为参数传递给 ,如文档中所述。由于这需要与服务器进行交互,因此速度会较慢,因此仅在必要时才这样做truereload

角度 2

以上适用于 Angular 1。我没有使用Angular 2,看起来那里的服务是不同的,有,和.我没有在那里测试不同的行为RouterLocationDOCUMENT