AngularJS 1.5.8のアプリケーションでは、ui-routerを使用して、すべて同じコントローラを使用するページ間を移動しています。 ng-controller属性はbodyタグに適用され、ui-view属性はdivのボディに明示的に含まれるdivに適用されます。単純化のために、のは、それは次のようになりましょう:ui-routerの状態が変更されたときの共有AngularJSコントローラの変数
<body ng-controller="SecurityController as securityCtrl">
<div ui-view></div>
</body>
例ルート、私が言っているものを視覚化するのに役立ちます場合には、次のとおりです。
.state('login', {
url: "/login/:returnState",
templateUrl: "Account/Login"
})
ルーティングが正常に動作し、いつれます私はそれが私が望むコントローラを再初期化していない状態を変更します。状態が変わるたびに未定義に設定するコントローラの変数はerrorMessage
ですが、ナビゲーションボタンにjavascriptを追加しないでください。
ルーティングのためにイベントハンドラを登録することができますが、$stateChangeError
と$viewContentLoaded
に正常に使用していますが、使用できるパラメータはevent, toState, toParams, fromState, fromParams, and error
です。大規模なswitch
ステートメントを使わずにこれらを簡単に使用して、共通コントローラにerrorMessage
変数を未定義に設定するように指示する方法はわかりません。すべてのルートがこの変数をクリアする必要はありませんが、そうしているかどうかを確認するだけで済みます。
さらに、各状態の変更後にコントローラを再初期化できると聞きました。それは計画BまたはCです。
fromStateまたはtoStateがこのようにマークされているかどうかを簡単に判断できる方法で、変数のクリアができるように、ルートのサブセットをマーキングする最も簡単な方法は何ですか?これを行うためのより良い(まだドライ)方法を考えることができれば、私はすべての耳です。
にそれは魔法のように動作します。 –
誰かが同じ問題を抱えている場合は、この回答は経路をマークする良い方法ですが、質問のタイトルが要求する内容を許可しない可能性があります。この手法を使用してコントローラ変数をクリアすることが可能かどうかはわかりません。 angular.module(...)。argumentsに$ injectorを追加すると、要求するタイプの** a **コントローラを取得できますが、すでに使用しているインスタンスと同じではありません。私のために、それは動作しません。他の投稿の提案は、コントローラではなく、サービスでクリアしたい変数を置くことです。それは私のために働いた。 –