新しいページをロードするように ng-click イベントを設定する必要があります。ページがロードされたら、ページのアンカーポイントまでスクロールします。この SO 投稿で提案されているすべてのソリューションを試しましたが、正しく機能しません。
これらのソリューションのほとんどは、既に読み込まれているページのアンカーまでスクロールすることを中心にしています。新しいページが読み込まれた後にスクロールする必要があります。
ここに私のビューコードがあります:
<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 を使用しようとしています
goToResultJobs
ユーザーがボタンをクリックしたときにトリガーされる ResultsCtrl 内のメソッドは次のとおりです。
$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()
が呼び出されたときに、スクロール先のハッシュにアンカー タグがありません。