私はAngular UI Routerを使用していて、現在の状態をリロードしてすべてのデータを更新するか、現在の状態のコントローラーを再実行したいと思います。
私は3つの状態レベルがあります: directory.organisations.details
directory.organisations には、組織のリストを含むテーブルが含まれています。テーブル内の項目をクリックすると、 directory.organisations.details がロードされ、$ StateParamsに項目のIDが渡されます。詳細状態では、このアイテムの詳細をロードし、それらを編集してからデータを保存します。これまでのところすべて大丈夫です。
今度はこの状態をリロードしてすべてのデータをリフレッシュする必要があります。
私が試してみました:
$state.transitionTo('directory.organisations');
これは親状態になりますが、コントローラをリロードしません、パスが変更されていないので私は推測します。理想的には、 directory.organisations.details 状態に留まり、親のすべてのデータも更新したいだけです。
私も試してみました:
$state.reload()
私はこれを$ state.reloadのAPI WIKIで確認しました。
任意の助けは大歓迎ですか?
この解決策はAngularJS V.1.2.2で機能します。
$state.transitionTo($state.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
私はこれがUIルータでリフレッシュするための最短の作業方法であることがわかりました:
$state.go($state.current, {}, {reload: true}); //second parameter is for $stateParams
更新新しいバージョンの場合:
$state.reload();
これは次のものの別名です。
$state.transitionTo($state.current, $stateParams, {
reload: true, inherit: false, notify: true
});
ドキュメンテーション: https://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state#methods_reload
それが最終的な解決策になります。 (@ Hollan_Risleyの投稿にヒントを得た)
'use strict';
angular.module('app')
.config(function($provide) {
$provide.decorator('$state', function($delegate, $stateParams) {
$delegate.forceReload = function() {
return $delegate.go($delegate.current, $stateParams, {
reload: true,
inherit: false,
notify: true
});
};
return $delegate;
});
});
今、あなたがリロードする必要があるときはいつでも、単に呼び出します。
$state.forceReload();
イオンフレームワーク用
$state.transitionTo($state.current, $state.$current.params, { reload: true, inherit: true, notify: true });//reload
$stateProvider.
state('home', {
url: '/',
cache: false, //required
おそらく、よりクリーンな方法は次のようになります。
<a data-ui-sref="directory.organisations.details" data-ui-sref-opts="{reload: true}">Details State</a>
HTMLからのみ状態をリロードできます。
@Holland Risleyの回答が最新のui-routerのapiとして利用可能になりました。
$state.reload();
現在の状態を強制的にリロードするメソッド。すべての解決は再解決され、コントローラは再インスタンス化され、イベントは再起動されます。
http://angular-ui.github.io/ui-router/site/#/api/ui.router.state.$state
$state.go($state.current, $stateParams, {reload: true, inherit: false});
$scope.reloadstat = function () { $state.go($state.current, {}, {reload: true}); };
ページ全体をリロードしたい場合は、$ windowをコントローラに挿入してから呼び出します。
$window.location.href = '/';
しかし、現在のビューだけをリロードしたいのであれば、$ scope、$ state、$ stateParamsをインジェクションします(このリロードでいくつかのパラメータを変更する必要がある場合のために、後者)コントローラメソッド:
$stateParams.page = 1;
$state.reload();
AngularJS v1.3.15角度UIルータv0.2.15
常にうまくいく愚かな回避策。
$state.go("otherState").then(function(){
$state.go("wantedState")
});
私のためにすべてが失敗しました。うまくいったことは…cache-view = "false"をビューに追加することだけです。
なぜこれらのどれもが私のために働かないように見えなかったのかわからない。最後にやったのは、
$state.reload($state.current.name);
これはAngular 1.4.0の場合
角度v1.2.26の場合、上記のいずれも機能しません。上記のメソッドを呼び出すクリックは、状態をリロードするために 2回 をクリックする必要があります。
そのため、$ timeoutを使用して2クリックをエミュレートすることになりました。
$provide.decorator('$state',
["$delegate", "$stateParams", '$timeout', function ($delegate, $stateParams, $timeout) {
$delegate.forceReload = function () {
var reload = function () {
$delegate.transitionTo($delegate.current, angular.copy($stateParams), {
reload: true,
inherit: true,
notify: true
})
};
reload();
$timeout(reload, 100);
};
return $delegate;
}]);
@Rohan answer https://stackoverflow.com/a/23609343/3297761 を使用できます。
しかし、ビューの変更後に各コントローラをリアルロードしたい場合は、次のようにします。
myApp.config(function($ionicConfigProvider) { $ionicConfigProvider.views.maxCache(0); ... }
私は複数のネストしたビューを持っていましたが、目的はコンテンツを含むビューだけをリロードすることでした。私はさまざまな方法を試してみましたが、うまくいったことはそれだけです。
//to reload
$stateParams.reload = !$stateParams.reload; //flip value of reload param
$state.go($state.current, $stateParams);
//state config
$stateProvider
.state('app.dashboard', {
url: '/',
templateUrl: 'app/components/dashboard/dashboard.tmpl.html',
controller: 'DashboardController',
controllerAs: 'vm',
params: {reload: false} //add reload param to a view you want to reload
});
この場合、必要なビューだけがリロードされ、キャッシュは機能します。
私はたくさんの答えがあったことを知っています、しかし私が全ページ更新を引き起こさずにこれをすることを発見した最良の方法は私が更新したい経路にダミーのパラメータを作成することです。ダミーパラメータへの乱数.
.state("coverage.check.response", {
params: { coverageResponse: null, coverageResponseId: 0, updater: 1 },
views: {
"coverageResponse": {
templateUrl: "/Scripts/app/coverage/templates/coverageResponse.html",
controller: "coverageResponseController",
controllerAs: "vm"
}
}
})
そしてそのルートへの呼び出し
$state.go("coverage.check.response", { coverageResponse: coverage, updater: Math.floor(Math.random() * 100000) + 1 });
魅力のように動作し、解決を処理します。
イオン性v1を使用している場合は、上記の解決法は、$ionicConfigProviderの一部としてイオン性がテンプレートキャッシングを有効にしているため機能しません。
それを回避するには少々手間がかかります - ion.angular.jsファイルでcacheを0に設定する必要があります。
$ionicConfigProvider.views.maxCache(0);
私はこの問題を抱えていました。それは私の頭を壊していました。私のルーティングはJSONファイルから読み込まれ、それからディレクティブに送られました。 UI状態をクリックできましたが、ページをリロードできませんでした。だから私の同僚は私にそれのための素晴らしい小さなトリックを見せた。
これは私のために働きました。
それが役に立てば幸い