2014-04-25 11 views

Odpowiedz

38

Istnieje rozwiązanie dla tego scenariusza. Użylibyśmy 1) jednej natywnej funkcji ui-router i 2) jednego ustawienia konfiguracyjnego. Można zauważyć working examplehere.

1) Pochodzący cechą definicji państwowych UI-router jest:

url nie jest potrzebne. Państwo można określić bez jego reprezentacji w miejscu.

2) Ustawienie konfiguracji:

ścieżka Łańcuch | Funkcja Ścieżka adresu URL, do którego chcesz przekierować, lub reguła funkcji, która zwraca ścieżkę URL. Wersja funkcja jest przekazywana dwa params: $ i $ wtryskiwaczy lokalizacji

Rozwiązanie: kombinacja tych dwóch. Musielibyśmy statebezurl i niestandardowych otherwise:

$stateProvider 
    .state('404', { 
    // no url defined 
    template: '<div>error</div>', 
    }) 

$urlRouterProvider.otherwise(function($injector, $location){ 
    var state = $injector.get('$state'); 
    state.go('404'); 
    return $location.path(); 
}); 

sprawdzić, czy wszystko w tym working example

+1

To działało jak czar. Dzięki @radim – Ray

+2

genialne rozwiązanie! dzięki @Radim – plong0

+0

to jest piękne, dzięki – Hoto

15

Od ui-router#0.2.15 można użyć $state.go() i wysłać opcji nie zaktualizować lokalizację:

$urlRouterProvider.otherwise(function($injector) { 

    var $state = $injector.get('$state'); 

    $state.go('404', null, { 
    location: false 
    }); 

}); 
+0

Dzięki! Działa to doskonale zarówno w przypadku przechwycenia "else" i "$ stateChangeError" dla dynamicznych adresów URL. – extempl

Powiązane problemy