Angular UIルータを使用して、OnEnterおよびOneXITコールバックを別のファイルに定義します。
-
27-12-2019 - |
質問
私はいくつかの状態を持つアンギュラUIルーターを使って簡単なアプリケーションを持っています。
実際に私のルーターにこの種のコードを持っています:
$stateProvider.state('map.layers', {
url: '/layers',
templateUrl: 'views/layers.html',
controller: 'LayersCtrl',
onEnter: function(map: Master.Map) {
// do stuff
},
onExit: function(map: Master.Map) {
// do stuff
}
});
.
コントローラは別のファイルで定義されており、OnEnterとOneXITコールバックを同じファイルに定義するための良い方法を探しています。
あなたの意見では、最高の解決策は何ですか?グローバル変数は機能する必要がありますが、それはあまり美しくありません。
解決
これを行うことができますが、これを知らずにこれはコードの匂いです。コントローラと状態の間にロジックを混在させていますが、それらは別々にあるはずです。
とにかく、これはあなたがこれを行うことができる方法です:あなたのコントローラ内で、$state
オブジェクトを挿入し、$state.get
メソッドを使用します。
.controller('layersCtrl', function($state) {
$state.get('map.layers').onEnter = blah;
$state.get('map.layers').onExit = blahblah;
});
.
しかしこれよりも、この共有機能をサービスに抽出することをお勧めします。これを行うのが難しいと思っているなら、私はモジュール間の結合が多すぎるように思われるので、私はあなたのコードを深く見てみるでしょう。
所属していません StackOverflow