2013-10-07 8 views
8

コントローラを共有する2つのルートがあり、1つはビューの読み込み前に解決されたデータを必要とし、もう1つは解決されたデータを必要としません。コントローラ内にルート解決データを手動で注入するにはどうすればよいですか?

ルーティングセグメントの例:

... 
when('/users', { 
    controller: 'UsersCtrl', 
    templateUrl: '/partials/users/view.html', 
    resolve: { 
     resolvedData : ['Accounts', function(Accounts) { 
      return Accounts.get(); 
     }] 
    } 
}). 
when('/users/add', { 
    controller: 'UsersCtrl', 
    templateUrl: '/partials/users/add.html' 
}) 
... 

コントローラの例:

app.controller('UsersCtrl', ['$scope', 'Helper', 'resolvedData', 
    function($scope, Helper, resolvedData) { 
     // this works for the first route, but fails for the second route with 
     // unknown "resolvedDataProvider" 
     console.log(resolvedData); 
}]); 

は、私が明示的に依存関係として解決名を使用せずに、コントローラでresolvedDataを得ることができる方法はありますか?だから、チェックを行うことができますか?

$ injectorを使用すると機能しません。これはangularjsで行うことができます

app.controller('UsersCtrl', ['$scope', 'Helper', '$injector', 
    function($scope, Helper, $injector) { 
     // this does not work -> fails with the unknown "resolvedDataProvider" as well 
     $injector.get('resolvedData'); 
}]); 

:しかし、これもresolveDataセットを( '/ユーザー)があるルートでは動作しません

if ($injector.has('resolveData')) { 
    var resolveData = $injector.get('resolveData'); 
} 

:私は次のように何かをしたいと思います?それとも、新しいコントローラを作成するだけですか?

ありがとうございます。

答えて

7

私は別の方法を考え出したように見えます行く。解決されたデータは$routeの一部です。したがって、次の方法でアクセスできます。

app.controller('UsersCtrl', ['$scope', '$route', 'Helper', 
    function($scope, $route, Helper) { 

     if ($route.current.locals.resolvedData) { 
      var resolvedData = $route.current.locals.resolvedData; 
     } 
}]); 
+0

このソリューションはどのように私のものより優れていますか?基本的には、ルートサービスで埋められたオブジェクトを使用して完全に同じことをしています。私の解決策は、ルータの一貫性とコントローラがまだ状況を処理できるようにします。 – Fourth

+3

@Fourth - 未使用の解決策を経路に追加することは、より良い選択肢であるとは思わない。私の解決策は自分のニーズに合っていると言おう。私はあなたの回答をupvoteしたが、私はあなたのdownvoteを信じていない。私の正当性は正当です。 –

+1

あなたは意図した方法で角度の機能を使用していません。あなたは確かに "働く"答えを見つけたが、意図された方法で機能を使用しません。ルート解決は、コントローラにコンポーネントを注入する方法です。解決がそのルートに意味をなさない場合、これらのコンポーネントは正当には未定義である可能性があります。私は、他の人がこの解決策を使用することを妨げるようにあなたを落胆させました。 – Fourth

5

他のルートは、ちょうどそのルート上で、未定義を注入し、それを必要としない場合:

ルータ:

when('/users', { 
    controller: 'UsersCtrl', 
    templateUrl: '/partials/users/view.html', 
    resolve: { 
     resolvedData : ['Accounts', function(Accounts) { 
      return Accounts.get(); 
     }] 
    } 
}). 
when('/users/add', { 
    controller: 'UsersCtrl', 
    templateUrl: '/partials/users/add.html', 
    resolve: { 
     resolvedData: function() { 
      return undefined; 
     } 
    } 
}) 

がコントローラ:

app.controller('UsersCtrl', ['$scope', 'Helper', 'resolvedData', 
    function($scope, Helper, resolvedData) { 
     if(resolvedData){ 
      //set some scope stuff for it 
     } else { 
     //do what you do when there is no resolvedData 
     } 
}]); 
関連する問題