2017-05-04 10 views
1

複数のビューに同じコントローラを使用します。私は、取ったルートに応じてコントローラーを異なってパラメーター化したいと思います。AngularJS:ルート経由でコントローラをパラメータ化する

ビューは、基本的に同じ角度のuiグリッドを表示します。したがって、同じコントローラです。しかし、あるビューでは、特定のデータに対してグリッドをあらかじめフィルタリングしたいのに対し、他のビューではグリッドをフィルタリングしません。

どうすればいいですか?

app.config(function ($routeProvider) { 
    $routeProvider 
     .when('/foo', 
      { 
       controller: 'Ctrl', 
       templateUrl: '/foo.html', 
      }) 
     .when('/bar', 
      { 
       controller: 'Ctrl', 
       templateUrl: '/bar.html', 
      }); 
}); 

app.controller('Ctrl', ['$scope' function ($scope) { .. }]); 
+0

パラメータ化するとどういう意味ですか –

+0

質問をより具体的に更新しました。 – hansi

答えて

1

基本的なレベルでは、あなたはそれをオフに使用して、分岐されていたものをテンプレート見るためにcurrent routeを検査できます。

app.controller('Ctrl', function($route) { 
    if ($route.current.templateUrl === '/foo.html') { 
    doFoo(); 
    } else { 
    doBar(); 
    } 
}); 

これは、ルートごとに異なるテンプレートを使用している場合にのみ機能します。同じテンプレートを再利用したい場合はが非常に便利です。

app.config(function($routeProvider) { 
    $routeProvider.when('/foo', { 
    controller: 'Ctrl', 
    templateUrl: '/foo.html' 
    resolve: { 
     whichRoute: function() { return 'foo'; } 
    } 
    }); 
}); 

app.controller('Ctrl', function(whichRoute) { 
    if (whichRoute === 'foo') { 
    doFoo(); 
    } else { 
    doBar(); 
    } 
}); 

そして、それよりもさらに良いあなたがそこにあるデータの事前フィルタリングを行うことができますので、resolveプロパティは、または約束の値を返す関数を受け入れることができます。

app.config(function($routeProvider) { 
    $routeProvide.when('/foo', { 
    controller: 'Ctrl', 
    templateUrl: '/foo.html', 
    resolve: { 
     dataToDisplay: function(YourDataService) { 
     return YourDataService.getSomeData(); 
     } 
    } 
    }); 
}); 

app.controller('Ctrl', function(dataToDisplay) { 
    doTheThing(dataToDisplay); 
}); 
+0

ありがとうございました!ちょうど私が探していたもの。 – hansi

2

そのように考える。 両方のルートが同じですが、一方はフィルタがあり、他方はフィルタがありません。

app.config(function ($routeProvider) { 
$routeProvider 
    .when('/foo/:filter?', 
     { 
      controller: 'Ctrl', 
      templateUrl: '/foo.html', 
     }) 
}); 

とあなたのコントローラであなたが$routeParams.filter疑問符はオプションのパラメータになりますでしょう:そう、現実にはそれが正しいので、あなたの設定は次のようなものかもしれない追加のパラメータfilter='some'と同じルートです。その後、Ctrlでは、フィルタパラメータを探し、適切にレンダリングするためにフィルタを使用します。 あなたのビューはそのままで、あなたのグリッドにフィルタをかけることができます。フィルタのパラメータが存在しない場合は、同じデータを返すだけです(フィルタなし)

希望するものがあります。

+0

これは正しい方法です。もう一つの答えは、角度のためのハッキーです。オプションのクエリパラメータを使用する方法があります。 – chairmanmow

関連する問題