Angular UIルータを使用して、OnEnterおよびOneXITコールバックを別のファイルに定義します。

StackOverflow https://stackoverflow.com//questions/20052982

質問

私はいくつかの状態を持つアンギュラ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;
});
.

しかしこれよりも、この共有機能をサービスに抽出することをお勧めします。これを行うのが難しいと思っているなら、私はモジュール間の結合が多すぎるように思われるので、私はあなたのコードを深く見てみるでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top