<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
ページをリロードしたい。これどうやってするの?
<a ng-href="#" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
ページをリロードしたい。これどうやってするの?
回答:
サービスのreload
方法をご利用$route
いただけます。$route
コントローラに注入してから、でメソッドreloadRoute
を作成します$scope
。
$scope.reloadRoute = function() {
$route.reload();
}
その後、次のようなリンクで使用できます。
<a ng-click="reloadRoute()" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
このメソッドは、現在のルートをリロードさせます。ただし、完全な更新を実行する場合は、それを挿入$window
して使用できます。
$scope.reloadRoute = function() {
$window.location.reload();
}
後で編集(ui-router):
JamesEddyEdwardsとDuncの回答で述べたように、angular-ui / ui-routerを使用している場合は、次のメソッドを使用して現在の状態/ルートをリロードできます。$state
代わりに注入するだけで$route
、次のようになります:
$scope.reloadRoute = function() {
$state.reload();
};
window
オブジェクトは$window
サービスを介して利用可能になり、テストとモックが容易になります。次のようなものを使用できます。
$scope.reloadPage = function(){$window.location.reload();}
そして:
<a ng-click="reloadPage" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
ちなみに、$ route.reload()が実際にページをリロードするのではなく、ルートのみをリロードすると思います。
$window
代わりに使用することをお勧めしますwindow
。
location.reload();
トリックを行います。
<a ng-click="reload()">
$scope.reload = function()
{
location.reload();
}
ルートも何も必要ありません
Angularsを使用する場合、私が絶対にお勧めするより高度なui-routerを使用する場合は、次のように簡単に使用できます。
$state.reload();
これは基本的にDuncの答えと同じです。
Angular 2+
Angular 2+を検索しているときにこれを見つけたので、ここに方法があります:
$window.location.reload();
使用するのは簡単$route.reload()
です(コントローラーに$ routeを挿入することを忘れないでください)が、例からは "ng-href"の代わりに "href"を使用することもできます。
<a href="" class="navbar-brand" title="home" data-translate>PORTAL_NAME</a>
Angularが{{}}タグのコンテンツを置き換える前に、ng-hrefを使用して、クリックによって引き起こされる無効なリンクからユーザーを保護する必要があるだけです。
Angular 1.5-全ページを更新せずにデータのみを再読み込みしたい上記のソリューションのいくつかを試した後、データを適切にロードすることに問題がありました。ただし、別のルートに移動して現在のルートに戻ると、すべてが$route.reload()
正常に機能することに気付きましたが、を使用して現在のルートのみをリロードしたい場合、一部のコードが正しく実行されません。次に、次の方法で現在のルートにリダイレクトしようとしました:
$scope.someFuncName = function () {
//go to another route
$location.path('/another-route');
};
モジュールの設定で、別のものを追加しますwhen
:
.config(['$routeProvider', function($routeProvider) {
$routeProvider.when('/first-page', {
templateUrl: '/first-template',
controller: 'SomeCtrl'
}).when('/another-route', {//this is the new "when"
redirectTo: '/first-page'
});
}])
そしてそれは私にとってはうまくいきます。ページ全体を更新するのではなく、現在のコントローラーとテンプレートをリロードするだけです。私はそれが少しハックだと知っていますが、それが私が見つけた唯一の解決策でした。
var reload = $location.url(); $location.url(''); $timeout(function() { $location.url(reload); });
。ランダムなルートを作成する必要はありません。しかし、どのコードがあなたのために再評価しないかを見るのは興味深いでしょう。redirectTo
sやresolve
関数でさえ、通常どおり再実行される$route.reload()
ように見えます(console.logを見てください)。
<a title="Pending Employee Approvals" href="" ng-click="viewPendingApprovals(1)">
<i class="fa fa-user" aria-hidden="true"></i>
<span class="button_badge">{{pendingEmployeeApprovalCount}}</span>
</a>
そしてコントローラーで
$scope.viewPendingApprovals = function(type) {
if (window.location.hash.substring(window.location.hash.lastIndexOf('/') + 1, window.location.hash.length) == type) {
location.reload();
} else {
$state.go("home.pendingApproval", { id: sessionStorage.typeToLoad });
}
};
とルートファイル
.state('home.pendingApproval', {
url: '/pendingApproval/:id',
templateUrl: 'app/components/approvals/pendingApprovalList.html',
controller: 'pendingApprovalListController'
})
したがって、URLで渡されたIDがアンカーをクリックして呼び出された関数からのIDと同じである場合は、単純にリロードします。それ以外の場合は、要求されたルートに従います。
これが役立つ場合、私がこの答えを改善するのを助けてください。どんな提案でも大歓迎です。
これは、JavaScriptでreload()メソッドを呼び出すことで実行できます。
location.reload();