2016-04-04 25 views
0

私は、具体的な状態で実装された抽象状態を持つ安全な領域を実装しようとしていました。ui-router継承された解決済みの依存関係

UI-ルータのドキュメントに記載されているように

子状態が親から解決の依存関係を継承するためthis blog postによると、私は、私は抽象状態が認証を解決しており、具体的な状態は、それに依存している可能性がありと思いました状態(S)

しかし、後に、同じUI-ルータドキュメントは

解決の鍵は、麟蹄でなければならないと述べあなたが子供をインスタンス化する前に、約束が解決されるのを待つことを望むならば、子どもの状態になってしまいます。

実際、具体的な状態のresolve行をコメントアウトすると、もう動作しません。

私は本当に何か不足しています。 ChildStateが解決済みの依存関係を継承する場合、なぜそれらを再注入する必要がありますか?

以下の私のコード:

router.config(function($stateProvider, $urlRouterProvider) { 

    var authentication = ["Auth", function(Auth) { 

        return Auth.$requireAuth(); 
       }]; 

    .state('secure', { 
      abstract: true, 
      template: '<navbar></navbar><ui-view/>', 
      resolve: authentication 


     }) 

     .state('secure.concrete', { 
      url: '/concrete', 
      templateUrl: 'views/concrete.html', 
      controller: 'concreteCtrl', 
      resolve: authentication // <--- if i comment this out, it wont work 
     }) 

UPDATE:私は間違った道を行くてるよう

涙の時間後に、それが見えます。問題は継承された解決済み依存から来ませんが、一度promisseが解決されると "リセット"されません。

各状態の変更時に再設定/再評価を約束するよう強制されますか?

resolve: { 
    authentication: authentication 
} 

authenticationが明示的に子状態コントローラの依存関係として記述する必要があることを意味「子状態に注入されなければならない」:

+0

なぜ何で何が再ありますか?何の各状態の変更で再評価? – Kato

+0

これは私の質問が理解できなかったことを意味すると思いますが、私はそれをお詫びしますが、もしあなたのコメントが再現不能であると確信できるならば。あなたが私をさらに手助けしたいのであれば、あなたは歓迎ですが、明確ではないことを詳しく教えてください。 –

+0

ニース!明らかに難しいコメントを追加しました。そのために残念。私が混乱している主な点は疑問の部分だと思います(例えば、「ChildStateが解決された依存関係を継承する場合、なぜそれらを再注入する必要がありますか?期限が切れたトークンについて話しているか、または「unauth()」と呼んでいると約束されていないのですか? - 評価されていますか?[これは役に立つかもしれません](https://github.com/firebase/angularfire-seed/blob/master/app/components/security/security.js#L59)?もしそうなら、私は詳しく説明することができます。 – Kato

答えて

2

問題が間違っresolve構文に起因する、オブジェクトでなければなりません。子状態の重複resolveは注射ではありません。 authenticationを2回呼び出すだけです。

+0

'resolve'を変更しています。オブジェクトを使ったシンタックスは助けにならなかった同じ結果。 –

+0

しかし、それは私がどんなコントローラーでも約束を込めないと思うようにする...約束$ root.properties()と$ state.go()をリダイレクトして、$ rootScope。$ onで捕捉されたChangeStateErrorイベントを発生させます。 –

+0

あなたは約束をコントローラに注入すべきだと思いますか? –

0

これは私のためにトリックをしましたが、私は、なぜ正確にはわからない:

の代わりstate.goを呼び出す()またはUI-SREFは、通常、私はstate.go(状態、{リロードでそれらを呼び出します。 true})または

解決方法が再評価されたようです。

関連する問題