2013-02-06 1 views
7

私は自分のアプリを設定して、選択した入力を使って色でフィルタリングすることができます。URLにこのカラーパラメータがある場合は、$routeproviderも渡します。経路を更新するために選択入力フィルターを使用する角度?

私が今したいのは、選択ボックスが変更されたときにURL /ルートを更新することです。選択肢の変更をルートにバインドするにはどうすればよいですか?

答えて

12

選択は、あなたが$location.pathを設定する機能を呼び出すために使用することができますundocumented NG-変更パラメータがあります。

<select ... ng-model="color" ng-change="updatePath()"> 

コントローラー:

function MyCtrl($scope, $location) { 
    $scope.updatePath = function() { 
     $location.path(... use $scope.color here ...); 
    } 
} 
+0

何らかの理由で選択ボックスが選択された色ではなく何も選択されていない状態に戻ります> –

+0

コントローラでは、$ scope.colorをルートのcolorパラメータに設定します。選択リストを生成するためにオブジェクトの配列を使用している場合、その配列の要素を指すように$ scope.colorを設定する必要があることに注意してください。詳細については、[this post](http://stackoverflow.com/questions/14297560/how-to-make-a-preselection-for-a-select-list-generated-by-angularjs)を参照してください。 –

+0

私は、選択リストを移入するために、製品の配列を使用していますが、また、_その配列 'code' $ scope.uniqueColours =関数(){ リターンから独特の色のタイトルを引っ張るために、この(アンダースコア)を使用しています。チェーン($ scope.products) \t \t .pluck( 'colour_title') \t \t .flatten() \t \t .unique() \t \t。値(); \t}; 'code' これは、もはや最初の製品配列を反映しません。設定できません $ scope.by_colour = $ routeParams.colour_title; –

4

あなた<select>要素を持つモデルにバインドされますng-model、これは$watchとなり、$location.pathまたは$location.searchのいずれかを更新するために使用します。個人的には、$location.searchを使用することをお勧めします。ちょうどを変更することができます。コントローラのパス全体を把握する必要がないため、必要なパラメータを少なくすることができます。

ですから、このような<select>要素を持っていると仮定すると:

<select ng-model="selectedColor" ng-options="color for color in colors"> 

あなたは色がundefinedあるいはfalsey(ある場合nullにそれを設定して確認して、あなたのバインドされた値を見て、あなたの$location.searchを更新するために$watchを使用することができます

$scope.$watch('selectedColor', function (color) { 
    if (color) { 
     $location.search('color', color); 
    } else { 
     $location.search('color', null); 
    } 
}); 

検索パラメータとローカルモデルとの間に双方向バインディングを設定すると、次のように設定できます。変更は、あなたの<select>に反映されます。

$scope.$watch('$location.search().color', function (color) { 
    $scope.selectedColor = color; 
}); 

そして、それはちょうどあなたのルーティングコントローラに$routeParams.colorへのアクセスの問題です。

完全な使用例はplunkを参照してください。

関連する問題