選択した入力を使用して商品のリストを色でフィルタリングできるようにアプリを設定しました$routeprovider
。また、URLにこの色パラメータが存在する場合は、この色パラメータをページに渡します。
私が今やりたいのは、選択ボックスが変更されたときにURL/ルートを更新することです。選択の変更をルートにバインドするにはどうすればよいですか?
要素<select>
は を使用してモデルにバインドされng-model
ます。これを使用して、または$watch
を更新できます。個人的には、 を使用することをお勧めします。必要なパラメーターだけを変更でき、コントローラーのパス全体を知る必要がないため、作業が少し少なくなります。$location.path
$location.search
$location.search
したがって、次の<select>
ような要素があるとします。
<select ng-model="selectedColor" ng-options="color for color in colors">
を使用$watch
して、バインドされた値を監視し、 を更新して$location.search
、必ずnull
if color isundefined
または falsey に設定することができます (これにより、検索パラメーターがクリアされます)。
$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を参照してください。