2017-12-28 22 views
0

私は値を解決するために外部サービス内の$transition$オブジェクトにアクセスしようとしています。解決法の外部Uiルータ

私の状態の定義は次のようになります。

$stateProvider.state(
    'detailView.showDocument', { 
    url: '/:documentId', 
    views: { 
     'sidebar': { 
     component: 'thumbnailView', 
     }, 
     'main': { 
     component: 'mainView', 
     } 
    }, 
    params: { 
     document: null 
    }, 
    resolve: { 
     document: 'resolveDocumentService', 
    } 
    } 
); 

私のサービスは、次のようになります。$transition$オブジェクトを注入することができないため

service.$inject =[ 
    '$transition$', 
]; 

function service(
    $transition$ 
) { 
    // do something 
} 

これはエラーになります。 その後、私は$uiRouterGlobalsを使用する解決策を見つけましたが、これは私にとって少し奇妙なようです。

$transition$オブジェクトがサービス内で移行の値を解決するために利用できない理由はありますか?

resolve: { 
    document: [ '$transition$', function($transition$) { 
    // write your logic here as `$transition$` will be available here 
    } ] 
} 

この関数は、注射され、そしてUIルータは自動的に必要な依存関係を注入:次のように

+2

おそらくXYの問題があります。 $ transition $はローカル依存関係であり、なぜそれがローカルであるのは、現在の状態に対してローカルであるということです。あなたの例では、resolveDocumentServiceはシングルトンになり、一度評価されるので、$ transition $は何の意味もありません。あなたは$ transition $で何をしようとしていますか? – estus

+0

@Martinあなたが使っているAngular-ui-routerのバージョンは? –

答えて

0

は@estus'はコメントのほかに、設定を変更することができます。さらに、特定の状態を構成しているため、XY問題に遭遇することはありません。

+0

AFAIK resolveは直接依存関係の名前を持つことはできません –

0

私の間違いは、サービスはもちろんシングルトンだということでした。サービスキーを使用する代わりに、通常の機能で解決しました。

関連する問題