2013-04-28 30 views
12

Jak można odczytać parametr z adresu URL w kontrolerze AngularJS?AngularJS: Odczytaj parametr trasy z kontrolera

Załóżmy, że mam adres URL taki jak http://localhost/var/:value i chcę, aby wartość była przechowywana w zmiennej w kontrolerze dla adresu URL /var/:value.

Próbowałem, używając $routeParams.value i $route.current.params.value ale $routeParams jest zdefiniowana na początku i $route nie działa.

+0

Co masz na myśli, mówiąc, że "$ routeParams jest niezdefiniowane na początku, a $ route nie działa"? Czy możesz udostępnić kod, w którym próbowałeś, aby działały? Zarówno $ route.current, jak i $ routeParams powinny dać prawidłowe wyniki w dostawcy kontrolera, który skonfigurował trasy i wstrzyknął zależności do kontrolera. –

Odpowiedz

15

Problem polega na tym, że prawdopodobnie wprowadzono $routeParams lub $route w kontrolerze, który jest uruchamiany przed zmianą trasy, np. twój główny/główny/kontroler strony.

Wstrzyknięcie $routeParams w kontrolerze dla konkretnej trasie (określonej przez właściwość controller podczas definiowania trasy), to będzie działać, inaczej jesteś prawdopodobnie lepiej słuchać różnych wydarzeń transmisje usług trasa.

spróbować zmienić swój kod do korzystania

$scope.$on('$routeChangeSuccess', function (ev, current, prev) { 
    // ... 
}); 
+1

Masz całkowitą rację, kontroler jest uruchamiany przed zmianą trasy, ponieważ klient bezpośrednio wywołuje adres URL podczas łączenia. Ale Twój opublikowany kod nie działa, ponieważ nie ma zmiany trasy. Wszelkie inne sugestie dotyczące rozwiązania tego problemu? – ctitze

+3

Jeśli klienci bezpośrednio trafią na adres URL bez pozwolenia AngularJS na obsługę routingu, nie będzie można użyć '$ routeParams'. '$ routeParams' działa tylko wtedy, gdy używasz' $ routeProvider.when (/ movies /: genre, {...}) 'w przeciwnym razie musisz wyodrębnić wartości ręcznie. Pytanie: czy używasz routingu AngularJS, czy szukasz sposobu na wyodrębnienie wartości z adresu URL? – Martin

+0

Używam AngularJS do routingu, ponieważ chcę załadować różne 'templateUrls' w moim' ng-view' (angular-express-seed). Ale dzięki za odpowiedź wydaje mi się, że muszę rozwiązać mój problem za pomocą innego podejścia. – ctitze

3

Wymagania: Zapewnić 'ngRoute' jest w module aplikacji

Route provider set up as: http://localhost/var/:valName 

funkcja ustawiona jako:

function functionName($scope, $routeParams){$scope.value = $routeParams.valName;} 

HTML widoku :

{{value['valName']}}