Twój <select>
element będzie zobowiązany do modelu z ng-model
, którego można użyć do aktualizacji lub $location.search
. Osobiście sugeruję użycie $location.search
: możesz zmienić tylko żądany parametr, a jego nieco mniej pracy, ponieważ nie musisz znać całej ścieżki w kontrolerze.
Więc zakładając, że masz <select>
elementu takiego:
<select ng-model="selectedColor" ng-options="color for color in colors">
Można użyć $watch
oglądać swoją wartość związanego i zaktualizować $location.search
, upewniając się, aby ustawić go na null
jeśli kolor jest undefined
lub w inny sposób falsey (to wyczyści parametr wyszukiwania):
$scope.$watch('selectedColor', function (color) {
if (color) {
$location.search('color', color);
} else {
$location.search('color', null);
}
});
Możesz chcieć ustawić dwukierunkowe powiązanie między parametrem wyszukiwania a modelem lokalnym, aby Zmiany będą widoczne w Twoim <select>
:
$scope.$watch('$location.search().color', function (color) {
$scope.selectedColor = color;
});
Wtedy to tylko kwestia dostępu $routeParams.color
w swojej kierowane kontrolera.
Zobacz ten plunk, aby uzyskać pełny przykład pracy.
Działa jak zaklęcie, chociaż z jakiegoś powodu pole wyboru powraca do niczego innego niż wybrany kolor> –
W kontrolerze ustaw parametr $ scope.color na parametr koloru z trasy. Zauważ, że jeśli używasz tablicy obiektów do wygenerowania listy select, musisz ustawić $ scope.color, aby wskazywało na element tej tablicy. Zobacz [ten post] (http://stackoverflow.com/questions/14297560/how-to-make-a-preselection-for-a-select-list-generated-by-angularjs), aby uzyskać więcej informacji. –
Używam wachlarz produktów, aby zapełnić listy wyboru, ale jestem również za pomocą tego (podkreślenie) pociągnąć unikalne tytuły kolorów z tej tablicy 'code' $ scope.uniqueColours = function() { zwrot _. łańcuch ($ scope.products) \t \t .pluck ('colour_title') \t \t .flatten() \t \t .unique() \t \t.wartość(); \t}; 'kod' , więc nie odzwierciedla już początkowej tablicy produktów. s nie można ustawić wartości $ scope.by_colour = $ routeParams.colour_title; –