新しいページを読み込むようにng-clickイベントを設定し、ページが読み込まれたら、ページ上のアンカーポイントまでスクロールする必要があります。 this SO post で提案されたすべてのソリューションを試しましたが、正しく動作させることができません。
これらのソリューションのほとんどは、既にロードされているページ上のアンカーへのスクロールを中心にしています。新しいページが読み込まれた後にスクロールする必要があります。
ここに私のビューコードがあります:
_<div class="see-jobs-btn" ng-click="$event.stopPropagation();goToResultJobs(r)">See Jobs</div>
_
これは、「プロファイルカード」内のボタンを表します。ユーザーがカードをクリックすると、プロファイルページに移動します。ただし、ユーザーがボタンをクリックすると、そのプロファイルページの#jobs部分に移動する必要があります(コードのgoToResultJobs(r)の前に$ stopPropogation()が必要です)。
GoToResultJobsメソッドは次のようになります。
_$scope.goToResultJobs = function(result) {
var profileUrl = result.slug;
window.location = profileUrl;
};
_
_$anchorScroll
_を使用して、アンカーをprofileUrl
にハードコーディングしただけですが、どちらも機能しません。私はAngularにかなり慣れていないので、ここで何が欠けているのかわかりません。
更新1:$ timeoutを使用しようとしています
次に、ユーザーがボタンをクリックしたときにトリガーされるResultsCtrl内のgoToResultJobs
メソッドを示します。
_$scope.goToResultJobs = function(result) {
var url = window.location + result.slug + '#jobs';
location.replace(url);
};
_
それは_/name#jobs
_パスをロードし、以下のProfileCtrlを呼び出します:
_app.controller('ProfileCtrl', ['$scope', '$http', '$timeout', '$location', '$anchorScroll',
function($scope, $http, $timeout, $location, $anchorScroll) {
if(window.location.hash) {
$timeout(function() {
console.log('TEST');
// $location.hash('jobs');
// $location.hash('jobs');
$anchorScroll();
}, 1000);
};
}]);
_
TEST
はジョブボタンがクリックされたときにのみコンソールに表示されますが、ユーザーがプロファイルをクリックしただけでは表示されないため、この設定は機能しているようです。私が今直面している問題は、ページの読み込みが開始され、URLバーのパスが_/name#jobs
_に変わりますが、ページの読み込みが完了する前に、jobs
がURLから削除されることです。したがって、$anchorScroll()
が呼び出されると、ハッシュにスクロールするアンカータグがありません。
指摘したように、_$anchorScroll
_はページのレンダリング後に発生する必要があります。そうでない場合、アンカーは存在しません。これは、$timeout()
を使用して実現できます。
_$timeout(function() {
$anchorScroll('myAnchor');
});
_
this plunkr を見ることができます。必ずポップアウトモードで表示してください(出力画面の右上隅にある小さな青いボタン)。
神聖な、これは単にautoscroll="true"
テンプレートに:
<div autoscroll="true" data-ng-include='"/templates/partials/layout/text-column.html"'></div>
試してください:
angular.module('anchorScrollExample', [])
.controller('ScrollController', ['$scope', '$location', '$anchorScroll',
function ($scope, $location, $anchorScroll) {
$scope.gotoBottom = function() {
// set the location.hash to the id of
// the element you wish to scroll to.
$location.hash('bottom');
$anchorScroll();
};
}]);
「bottom」は、スクロール先のhtml要素のIDです。
ここのドキュメント: https://docs.angularjs.org/api/ng/service/$anchorScroll