angular ui-routerの親状態を作成するには、状態が変化したときに常にコントローラーコードを実行しますか?
$ stateProviderで次のように定義された親子関係があるとします。
.state('myProfile', {
url: "/my/profile",
templateUrl: 'my/profile.html',
controller: 'MyProfileController'
}).state('myProfile.edit', {
url: "/edit",
templateUrl: 'my/profile.edit.html',
controller: 'EditMyProfileController'
});
ここでの考え方は、親のmyProfile
状態は編集不可ですが、子のmyProfile.edit
状態は、プロファイルを編集するための実際のフォームです。これがプロファイルページの動作方法であるかどうかは無視してください。私は物事をいじって学習しています。
ユーザーがフォームを送信すると、$ stateオブジェクトを使用して親ページに戻ります。
$scope.save = function() {
userResource.update($scope.user, function() {
SessionService.refresh();
$state.go('myProfile'); // also tried with reload: true as well
});
}
ユーザーがプロファイルデータを保存した後isが正しく保存されます-F5を押してブラウザーを更新しない限り、親のビューは更新されません。
私が気づいたことの1つは、子供を作るとmyProfile.edit
状態をmyProfile
状態の子ではなく、親自体に変更すると、この問題は実際にはなくなり、予期したとおりに動作します(ただし、レイアウトはこのように見えます)。
UIルーターが親の結果をキャッシュしているようです。モデルの変更があったことや、コントローラーを再実行する必要があることは疑いません。
親myProfile
ページが常にコントローラーを実行してデータを再ロードしている間に、親子関係を維持するにはどうすればよいですか?基本的に、私はこれを$state
が使用されているか、myProfile
へのリンクがクリックされたとき。どうやってやるの?
そして、私が求めることを実行できない場合、一連の子状態を設定してそれらを意図したとおりに機能させることができることを知っています...しかし、親のデフォルトの子状態をどのように設定できますか?たとえば、myProfile.edit
をmyProfile
のデフォルトの子状態にするには-どうすればよいですか?
ありがとう!
子ステートから親ステートに移動するときに親ステートを強制的にリロードするには、以下の両方の方法を使用できます。純粋なjsまたはディレクティブ属性。
<a ui-sref="myProfile" ui-sref-opts="{ reload: true }">Back to My Profile</a>
または
$state.go('myProfile', null, { reload: true });
「$ stateChangeStart」イベントをリッスンしたり、$ state.reload()を使用したりしましたか?
$ state.goにバグがあり、リロードオプションが除外されているようです。 $ state.transitionToは私のために動作します。
$state.transitionTo('state',null,{reload: true});