2013-02-06 10 views

Odpowiedz

12

wybierz ma parametr undocumented ng-zmiany, które można wykorzystać do wywołania funkcji, aby ustawić $location.path:

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

Kontroler:

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

Działa jak zaklęcie, chociaż z jakiegoś powodu pole wyboru powraca do niczego innego niż wybrany kolor> –

+0

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. –

+0

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; –

4

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.

Powiązane problemy