Aksi takdirde StateProvider'da


Yanıtlar:


124

Sadece kullanamazsınız $stateProvider.

Aşağıdakine $urlRouterProviderbenzer bir kod enjekte etmeniz ve oluşturmanız gerekir :

$urlRouterProvider.otherwise('/otherwise');

/otherwiseUrl her zamanki gibi bir durumu üzerinde tanımlanmalıdır:

 $stateProvider
    .state("otherwise", { url : '/otherwise'...})

Ksperling'in açıkladığı bu bağlantıya bakın


Aslında kullanabilirsiniz $stateProvider. Yönlendirme değil, yalnızca bir şablon görüntülemek istiyorsanız daha az iş. @ Juan-hernandez'in cevabını tercih ederim.
weltschmerz

aktarılan değer otherwise(bu durumda '/otherwise') eyaletin adıyla (ilk parametre .state) veya urlseçeneğin değeriyle eşleşmeli mi?
d512

Bu artık kullanımdan kaldırıldı - @babyburger'den gelen yanıta bakın
Vedran

81

Tümünü yakala sözdizimini ( ) $stateProviderkullanarak yapabilirsiniz . Listenizin alt kısmına aşağıdaki gibi bir durum yapılandırması eklemeniz yeterlidir:"*path"

$stateProvider.state("otherwise", {
    url: "*path",
    templateUrl: "views/error-not-found.html"
});

Tüm seçenekler https://github.com/angular-ui/ui-router/wiki/URL-Routing#regex-parameters adresinde açıklanmıştır .

Bunun tersine bu seçeneğin güzel yanı, $urlRouterProvider.otherwise(...)yer değiştirmeye zorlanmamanızdır.


lütfen detaylandırır you're not forced to a location changemısınız :?
Kevin Meredith

1
Demek istediği, url'nin eskisi gibi kalacağı. Dolayısıyla, kullanıcı adresine giderse /this/does/not/exist, URL adres çubuğunda bu şekilde kalacaktır. Diğer çözüm sizi /otherwise
Matt Greer

Çözümünüzü kullandım ve işe yaradı (bulunamayan url'yi tutabilirim ki bu harika çünkü luisfarzati.github.io/angulartics kullanıyorum ve bu şekilde bulunamayan sayfalara giden navigasyonu da görebiliyorum) kullanıcının gittiği url mevcut değil. Ancak bu url'ye bir denetleyici içinde $ state.go ('aksi') kullanarak gidersem, url'yi kaybederim. Kullanıcı bir öğenin ayrıntılar sayfasına gittiğinde ve sunucu 404'ü döndürdüğünde (örneğin öğe silinmişse) bu duruma açıkça gidiyorum. Bunu düzeltmenin bir yolunu biliyor musun?
pcatre

@pcatre location = false seçeneğini kullanabilirsiniz ve url değişmez. Örneğin. $ state.go ('aksi takdirde', {}, {location: false})
JakubKnejzlik

35

Ayrıca, $ state işlevini aksi halde işleve manuel olarak enjekte edebilirsiniz, daha sonra url olmayan bir duruma gidebilirsiniz. Bu, tarayıcının adres çubuğunu değiştirmemesi avantajına sahiptir, bu da önceki bir sayfaya geri dönmenin işlenmesi için yararlıdır.

    $urlRouterProvider.otherwise(function ($injector, $location) {
        var $state = $injector.get('$state');

        $state.go('defaultLayout.error', {
            title: "Page not found",
            message: 'Could not find a state associated with url "'+$location.$$url+'"'
        });
    });

bu, uygulamanın ortasında olup olmadığımızı nasıl kontrol edeceğime dair sorunumu çözdü - çok teşekkür ederim :)
Jörn Berkefeld

günümü kurtardın!
MAELIG

Bunu en aza indirmek istiyorsan unutma $ enjekte ihtiyacın var
Sten Muchow

4

Ben sadece zaten verilmiş olan harika cevaplardan haberdar olmak istiyorum. @uirouter/angularjsSınıfın en son sürümü UrlRouterProviderkullanımdan kaldırıldı olarak işaretlendi . Şimdi UrlServicebunun yerine kullanmanızı tavsiye ediyorlar . Aşağıdaki değişiklikle aynı sonucu elde edebilirsiniz:

$urlService.rules.otherwise('/defaultState');

Ek yöntemler: https://ui-router.github.io/ng1/docs/1.0.16/interfaces/url.urlrulesapi.html


3

Tamam, sorduğunuz sorunun örnek kodun ilk satırlarında zaten yanıtlanmış olduğunu fark ettiğiniz o aptal an! Sadece örnek koda bir göz atın.

       angular.module('sample', ['ui.compat'])
      .config(
        [        '$stateProvider', '$routeProvider', '$urlRouterProvider',
        function ($stateProvider,   $routeProvider,   $urlRouterProvider) {
          $urlRouterProvider
            .when('/c?id', '/contacts/:id')
            .otherwise('/'); // <-- This is what I was looking for ! 


          ....

Buraya bir göz atın.


0

Kabul edilen cevap referansları angular-routehakkında sorular sorulur ui-router. Kabul edilen cevap , modülü gerektiren "monolitik" kullanır (ancak modüle ihtiyaç duyar )$routeProviderngRouteui-routerui.router

En yüksek puan alan cevap$stateProvider onun yerine kullanıyor ve şöyle bir şey söylüyor .state("otherwise", { url : '/otherwise'... }), ancak bağlandığı belgelerde "aksi" den herhangi bir şekilde bahsedemiyorum . Ancak, söylediği yerde bu cevapta$stateProvider bahsedildiğini görüyorum :

Sadece kullanamazsınız $stateProvider. Enjekte etmen gerek$urlRouterProvider

Cevabımın size yardımcı olabileceği yer burasıdır. Benim için şöyle kullanmak yeterliydi $urlRouterProvider:

 my_module
   .config([
    , '$urlRouterProvider'
    , function(
        , $urlRouterProvider){
            //When the url is empty; i.e. what I consider to be "the default"
            //Then send the user to whatever state is served at the URL '/starting' 
            //(It could say '/default' or any other path you want)
            $urlRouterProvider
                    .when('', '/starting');
                    //...
    }]);

Benim önerim tutarlıdır ui-router belgelere , ( bu spesifik revizyon o benzer kullanımını içerir). when(...)yöntem (işleve ilk çağrı):

app.config(function($urlRouterProvider){
  // when there is an empty route, redirect to /index   
  $urlRouterProvider.when('', '/index');

  // You can also use regex for the match parameter
  $urlRouterProvider.when(/aspx/i, '/index');
})
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.