angular 開発者のほとんどが知っているように、Resolveプロパティを使用すると、特定のページへのアクセスを保護できます。
スニペット コードの簡単な例を次に示します。
.config(['$routeProvider', 'securityAuthorizationProvider',
function ($routeProvider, securityAuthorizationProvider) {
$routeProvider.when('/test', {
templateUrl: '/myCorrespondingView.tpl.html',
controller: 'MyCorrespondingCtrl',
resolve: securityAuthorizationProvider.requireAuthenticatedUser
});
}])
「保護されたページにアクセスするには、ここをクリックしてください」というリンクを含むページを考えてみましょう($location.path("/test")
ボンネットの下に作成)。
期待は次のとおりです。クリックすると、存在するresolve
ようにrejected
なり、...呼び出し元のページ以外のページにリダイレクトされません。
これにより、何も発生しません (ユーザーがページにアクセスできないという単純な事実で十分です) が、URL が対象の保護されたページに変更されました。=> myApp.com/test
(なぜAngularは約束の結果が成功した場合にのみこの置換を行わないのですか?? :(、しかし、これは私が今尋ねた別の質問です: AngularJS /対応するテンプレートの解決プロパティが解決された場合にのみURLを変更する) .
その後...もう一度クリック...
resolve
残骸は一切再処理されていないようです。
次に...アプリケーションの他のリンクをクリックして(もちろん完全なリダイレクトなしで)、URLを変更するために必要な方を選択し、保護されたリンクを再クリックします=>Resolve
再度適切に処理されます。
現在のページの URL と必要なページの URL をチェックし、resolve
両方が同じ場合にタスクの再処理を回避する Angular メカニズムはありますか?
resolve
URLがすでにターゲットページに対応している場合でも、プロセスを強制したい.
**更新******** この投稿から: https://stackoverflow.com/a/12429133/985949
Angular は場所の変更を監視します (場所バーに入力するか、リンクをクリックするか、$location.path() を介して場所を設定することによって達成されます)。この変化を感知すると、イベント「$locationChangeSuccess」を $broadcast し、ルーティング プロセスを開始します。
上で想定したチェックは確かに$location.path
方法で行われているようですね...評価を強制できれば素晴らしいと思います。