私のアプリでは、プログラムによって、戻るボタンで前のURLに戻ります。ここで私は何をすべきかです:
$window.history.back();
さて、前回のURL(コントローラ/テンプレート完全にロードされた)に変更した後、私はいくつかのコードを実行します。 $ window.history.back()の成功を聞くにはどうすればよいですか?以前とまったく同じ位置にスクロールすることを実現したい。私はイベント$stateChangeSuccess
で一番上にスクロールしたいが、sbならスクロールしたいので、これを行う必要がある。戻るボタンで戻ると、スクロール位置に戻ります(通常のリスト詳細ビュー - > sbが詳細ビューに移動し、スクロール位置が以前と同じでなければならないリストに戻ります)。残念ながらthisは完全なコントローラ/ビューが読み込まれる前に呼び出されるため、機能しません。
編集
私の計画は以下の通りです。実行中:
var lastScrollPosition = 0;
$rootScope.$on('$stateChangeSuccess', function(event, toState, toParams, fromState, fromParams) {
lastScrollPosition = $(window).scrollTop();
$("html, body").animate({
scrollTop: 0
}, 0);
});
$rootScope.backButton = function() {
$window.history.back().then(function() {
$("html, body").animate({
scrollTop: lastScrollPosition
}, 0);
});
};
スクロール位置が変更された場合、それは機能します。また、戻るボタンを押すとbackButton
-Functionが呼び出されます。 $window.history.back()
-Commandが実行された後、私はSuccess-Functionを呼び出し、保存されたスクロール位置にジャンプして、この機能がどのように達成されたかを知りたいと思います。
アプリケーションはスクロール位置をどのように覚えていますか?考えられるアイデアは、スクロールイベントのリスナーであり、実際のスクロール位置でURLにクエリパラメータを設定します。ルートコントローラは、URLからスクロール位置を受けなければなりません(存在する場合)。 –
それは本当に良いアイデアですが、私はurlがstrを読みやすく/美しく保つべきであるのでsthをurlに追加したくないです。私の計画はどうなっているのか、私の答えを更新しました。 –
あなたは、ブラウザの組み込みの戻るボタンを押しているユーザーの場合も処理したいですか? – yscik