308

いくつかのユーザーコンテキストに基づいてページ全体をレンダリングし、いくつかの$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())

すべてのリクエストを手動で再発行せずにページを再レンダリングする別の方法はありますか?

4

13 に答える 13

408

記録として、Angular に現在のページの再レンダリングを強制するには、以下を使用できます。

$route.reload();

AngularJSのドキュメントによると:

$location が変更されていなくても、$route サービスが現在のルートをリロードします。

その結果、ngView は新しいスコープを作成し、コントローラーを再インスタンス化します。

于 2013-05-29T18:54:05.070 に答える
39

特定のルート パスのページをリロードする場合:-

$location.path('/path1/path2');
$route.reload();
于 2014-06-30T09:37:52.150 に答える
29

angular ui-routerを使用している場合、これが最適なソリューションになります。

$scope.myLoadingFunction = function() {
    $state.reload();
};
于 2016-07-28T05:01:10.873 に答える
6

Angular 2 ( AngularJs ) より前

スルールート

$route.reload();

アプリケーション全体をリロードする場合

$window.location.reload();

アンギュラー 2+

import { Location } from '@angular/common';

constructor(private location: Location) {}

ngOnInit() {  }

load() {
    this.location.reload()
}

または

constructor(private location: Location) {}

ngOnInit() {  }

Methods (){
    this.ngOnInit();
}
于 2018-07-23T08:38:49.277 に答える
5

私が考えた最も簡単な解決策は、

戻ってくるたびにリロードしたいルートに「/」を追加します。

例えば:

次の代わりに

$routeProvider
  .when('/About', {
    templateUrl: 'about.html',
    controller: 'AboutCtrl'
  })

使用する、

$routeProvider
  .when('/About/', { //notice the '/' at the end 
    templateUrl: 'about.html',
    controller: 'AboutCtrl'
  })
于 2016-02-01T20:04:33.190 に答える
3

ユーザーに詳細なリロード通知を行わずに、次のコードを使用します。ページをレンダリングします

var currentPageTemplate = $route.current.templateUrl;
$templateCache.remove(currentPageTemplate);
$window.location.reload();
于 2016-05-04T11:38:16.783 に答える