2016-04-30 1 views
2

可変パラメータを持つAngularJSでルートを設定しました。AngularJS - コントローラ名にNgRouteのパラメータを使用する

this questionの拡張です。私はそうのような変数templateUrlでparamsを使用することができます。

.when('/course/:lesson', { 
    templateUrl: function(params){ 
     return '/partials/course/' + params.lesson; 
    } 
    //... 
}) 

をしかし、私は変数コントローラ名のために何かをしようとした場合、私は代わりに別の100を書き込むので、

.when('/course/:lesson', { 
    templateUrl: function(params){ 
     return '/partials/course/' + params.lesson; 
    }, 
    controller: function(params){ 
     return params.lesson + 'Ctrl'; 
    } 
}) 

基本的unknown providerエラーが出ますすべてが全く同じ構造に従っているルートで、私はlesson変数を取って、{{lesson}}Ctrlコントローラと同様に/partials/course/{{lesson}}ルートにマップしたいと考えています。

これは可能ですか?

答えて

3

あなたはクリーナーではなく、以下のようにすることができます。しかし、それはあなたがしようとしていたように動作しますcontrollerProviderを有し、ui.routerを見ていきます場合は、より簡単になりますこのような状況の取り扱い

controller: function($scope, $controller, $routeParams){ 
    $controller($routeParams.lesson + 'Ctrl', {$scope: $scope}); 
} 

動作します。

+0

これは素晴らしいです、私はあなたが '$ controller'のようにこれを渡すことができるのか知らなかった! – Jascination

0

いいえコントローラ名は静的なものです。これらは関数であり、アプリケーションを起動する前にコンパイルされています。詳細情報here

ただし、ngControllerに基づいて表示するコントローラを動的に追加することは可能です。詳細情報here

+1

コントローラ名は静的ですが、コントローラインスタンスを手動で作成できます。 Panrajの答えを確認してください。 – dfsq

関連する問題