3

$routeProvider resolveパラメーターを使用すると、コントローラー関数に追加の依存関係を挿入できます。明示的な依存性注入宣言と組み合わせる方法は?

エカンプル:

angular.module('myModule', [])
    .config(function($routeProvider) {
        $routeProvider.
            when('/tabOne', { templateUrl : 'tabOne.html', controller: TabOne, 
                resolve: {
                  someDependency: SomeDependency.factoryFunction
                }
     });
            
});

その後:

TabOne.$inject = [ '$scope', 'someFirstService', 'someOtherService' ];

ご覧のとおり、上記の DI 宣言により、2 つのサービスがTabOneコントローラー (someFirstServiceおよびsomeOtherService) に挿入されます。someDependencyこれら 2 つは問題なく動作しますが、ルートが解決されて注入された後にのみルートを変更したいと考えてTabOneいます。Controller 関数の引数リストに単純に追加someDependencyすると、DI エラーで失敗します。

それを行う方法はありますか?

4

1 に答える 1

0

まず、コントローラーは、依存関係が解決されるまで待ってから呼び出される必要がありますか、それとも実際にSomeDependency.factoryFunctionの解決された値が必要ですか?

後者の場合のように見えます。解決値が必要です。

この場合、機能する1つのアプローチは、2つのTabOneコントローラーを使用することです。

angular.module('myModule', [])
    .config(function($routeProvider) {
        $routeProvider.
            when('/tabOne', { templateUrl : 'tabOne.html', controller: TabOneRouted, 
                resolve: {
                  someDependency: SomeDependency.factoryFunction
                }
     });

});

function TabOne($scope, someFirstService, someOtherService) {
  ... code here ...
}

function TabOneRouted($scope, someFirstService, someOtherService, someDependency) {
    TabOne($scope, someFirstService, someOtherService);
    ... your code dealing with someDependency here ...
  }
于 2012-11-06T20:45:48.283 に答える