詳細ページ(戻るボタンがあります)に移動する_ng-repeat
_リストがあります。 _$scope.items
_変数は、ページが最初にロードされたときに発生するgetリクエストから、私のrefreshItems()
関数を使用してロードされます。
詳細ページの[戻る]ボタンをクリックすると、正しいページに戻りますが、リストはnot更新されます。新しいアイテムが読み込まれて表示されるように、このリストを更新する必要があります。
戻るボタンをionicHistory
を使用して戻る_ng-click
_関数に接続し、refreshItems()
関数を呼び出すだけでよいと思いました。ただし、これは最初のページのアイテムをリロードしません。
上記の試みは最後のページに戻りますそしてrefreshItems()
関数(および新しいデータが読み込まれます。これはconsole.log()
ステートメントのおかげでわかります)が、ng-repeatを再構築する必要があると思います。 $scope.$apply()
と$route.reload()
に関する情報をいくつか見つけましたが、goBack()
関数の最後に配置したときに、どちらも問題を修正しませんでした。
controller.js
_$scope.refreshItems = function() {
console.log("Refreshing items!");
$http.get('http://domain/page.aspx').then(function(resp) {
$scope.items = resp.data; console.log('[Items] Success', resp.data);
}, function(err) { console.error('ERR', err); });
};
$scope.goBack = function() {
$ionicHistory.goBack();
$scope.refreshItems();
};
_
メインページのHTML
_<div class="list">
<a ng-repeat="i in items" class="item" href="#/tab/details?ID={{i.Item_ID}}">
<b>Item {{i.Item_Name}}</b>
</a>
</div>
_
詳細ページの戻るボタン
_<ion-nav-bar>
<ion-nav-back-button class="button-clear" ng-click="goBack();">
<i class="ion-arrow-left-c"></i> Back
</ion-nav-back-button>
</ion-nav-bar>
_
メインページにrefreshItems()
を呼び出すrefresher
があり、正しく更新されます。問題は、リフレッシュを$ionicHistory.goBack()
または$state.go()
のいずれかとペアリングしようとしたときに最も確実に発生します。リフレッシャーが呼び出している関数を直接呼び出すことは機能しないため、プログラムでリフレッシャーを呼び出す方法はありますか(ロード後/ロード時)?
私はこれに対する解決策を見つけました!
解決策は、$scope.$on('$stateChangeSuccess')
関数を使用することです。関数パラメーターを使用してto/fromビューを確認するか、$location.path()
を使用します。
$scope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
console.log("State changed: ", toState);
if ($location.path() == "/tab/main") {
$scope.refreshItems();
}
}
ionicConfigProvider
にキャッシュフラグを設定します。次のように、状態プロバイダー内のキャッシュを無効にします。
$stateProvider.state('mainPage', {
cache: false,
url : '/dashboard',
templateUrl : 'dashboard.html'
})
詳細については、 手動 を参照してください。
すべてのIonicビューは cached ;次のようにキャッシュを防止します:
cache-view="false"
例えば:
<ion-view view-title="Title" cache-view="false">
詳細ページからイベントをブロードキャストし、リストコントローラーでこのイベントをリッスンすることもできます。