次のようなコードがあります。
someRequestToServer().then(response => {
console.log('phase before nav = ' + $rootScope.$$phase);
$location.path('/somepath');
console.log('phase post nav = ' + $rootScope.$$phase);
return response;
});
両方の印刷行が '$digest' で返されます。これは、ダイジェスト サイクルにいることを意味します ... それでも、 $location.path 呼び出しは単に機能していません。具体的には、ブラウザの URL ブラウザは変更されません。実際、これは機能する唯一の部分です。
また、呼び出しの後、location.path() は適切な URL を返します。失敗しているのは、ブラウザーに伝達してページを自動的にルーティングする機能です。$route.reload() を使用してルーティングを強制することはできますが (コメントで提案されているように)、ブラウザーの URL を変更することはできません。これにより、ページが URL とページの状態が悪い場所に置かれます。一致しない。
window.location.href を直接使用することで、これを回避できましたが、さまざまな理由から、これは優れた解決策ではありません。
$location.path が angular スコープの外で呼び出されているために機能しないことはたくさんあります (したがって、適用で強制する必要があります) が、ダイジェスト サイクルにあると思われる場合のアイデアはありますか?