2015-01-25 26 views
30

Önceden oluşturduğum bir duruma yönlendiren başka bir URL parametresi ekleme isteğim var. Verimlilik amacıyla, aynı duruma işaret etmek için birden çok URL ekleyip ekleyemeyeceğimi görmeye çalışıyorum veya bu yeni durumda bu duruma yeniden yönlendirmek için $ UrlRouterProvider.when() yöntemini kullanmalı mıyım?AngularJs UI yönlendirici - birden çok URL içeren bir durum

Ex. Bu zaten mevcut olan

.state('site.link1', 
    { 
    url: '/link1', 
    templateUrl: '/views/link1.html', 
    controller: 'link1Ctrl' 
    }) 

ve isteğin link1 sayfasına işaret eden www.site.com/newlink adresini eklemektir. Böyle bir şey var mı?

.state('site.link1', 
    { 
    url: '/link1, /newlink', 
    ... 
+1

Şu anda ya farklı bir URL ile ya da çok kez durumu tanımlamanız ya da tanımlamanız gerekecek ... bazı yöntemler şunlardır: http: // stackoverflow.com/a/23853129/1679310 –

+1

tek değişiklik stateParams ise, aynı rotaya ve boş paramın geçmesine izin verirseniz, o kadar da zarif olmayan tek şey, bir "//" 'iniz olacaktır. url. Eğer spec tamamen farklı bir url tanımlıyorsa, o zaman bu farklı ursl'e aynı durumdaki 2 farklı param değeri yeniden yönlendiriliyorsa, –

+0

yeni bir duruma ihtiyaç duyuyorsa, o zaman ilk argüman olarak routeparam'ı aldığınız ve url'yi buna göre döndürdüğünüz bir fonksiyon olarak templateurl kullanabilirsiniz. . ama tam olarak ne yapmaya çalıştığınız konusunda net değil. – PSL

cevap

14

Sen params kullanın: Bu

$state.go('site.link', {link: 'link1'}) 
$state.go('site.link', {link: 'link2'}) 
+0

Merak ediyorum, verdiğiniz bağlantıda böyle bir örnek gördünüz mü? – mpgn

+0

Bağlantı belgeleri gösterir ve contacts.details kullanır. "Go" işlevini kullanarak durumun nasıl değiştirileceğini göstermek için bu örneği kullanıyorum. – Valter

7

gibi aynı durumu kullandığınızda kullanılabilir böylece

https://github.com/angular-ui/ui-router/wiki/URL-Routing

.state('site.link', 
{ 
    url: '/{link}' 
    .. 
} 

when() fonksiyon

Daha sonra kök yapılandırmasına
.state('site.link1', 
    { 
    url: '/link1', 
    templateUrl: '/views/link1.html', 
    controller: 'link1Ctrl' 
    }) 

Neredeyse aynı sorun vardı
angular.module('myApp', [...]) 
    .config(function ($urlRouterProvider) { 
     $urlRouterProvider.when(/newlink/, ['$state','$match', function ($state, $match) { 
      $state.go('site.link1'); 
     }]); 
    }); 
0

, yalnızca başka sınırlamasıyla - Ben aynı kalmasını tarayıcıda url istedim çünkü, bir yönlendirme kullanmak istemedim, ama aynı durumu gösterir.
Bunun nedeni, önceki kayıtlı URL'yi zaten kaydeden kullanıcılar için chrome kaydedilen parolaların çalışmasını istedim.
/gilly ve aynı duruma hem noktaya /new/gilly

: Benim durumumda

bu iki URL'ler istedi.

Bunu, /gilly için tanımlanmış bir duruma sahip olarak çözdüm ve ikinci URL için, /new adı verilen soyut bir durumu tanımladım.

Bu

bu kadarını edilmelidir:

$stateProvider.state('new', { 
    abstract: true, 
    url: '/new' 
    template: '', 
    controller: function() { } 
}).state('gilly', { 
    url: '/gilly', 
    template: 'gilly.html', 
    controller: 'GillyController' 
}).state('new.gilly', { 
    url: '/gilly', // don't add the '/new' prefix here! 
    template: 'gilly.html', 
    controller: 'GillyController' 
}); 
11

Regex ve url bir parametre kullanmayı deneyin. Optimal değil ama çalışır. ui-sref ile bağlantılar oluşturmak için Url'ler http://angular-ui.github.io/ui-router/site/#/api/ui.router.util.type:UrlMatcher yılında regex üzerinde

.state('site.link1', 
{ 
    url: '/{path:link1|newlink}', 
    templateUrl: '/views/link1.html', 
    controller: 'link1Ctrl' 
}) 

fazla bilgi

oldukça basit olacak şekilde bu yaklaşımı bulundu

<a ui-sref="site.link1({path:'link1'})" >site link 1</a> 
<a ui-sref="site.link1({path:'newlink'})">site new link</a> 
4

bir fonksiyonu olarak devlet adı ile aynı parametreyi geçmek ve temizle: yalnızca url özelliğini değiştirerek, iki eşit durumu oluştur

//Both root and login are the same, but with different url's. 
var rootConfig = { 
    url: '/', 
    templateUrl:'html/authentication/login.html', 
    controller: 'authCtrl', 
    data: { 
     requireLogin: false 
    } 
} 

var loginConfig = Object.create(rootConfig) 
loginConfig.url = '/login' 

$stateProvider 
    .state('root', rootConfig) 
    .state('login', loginConfig) 
+2

Hala iki durumu tanımlar, sadece daha okunabilir. – 0xc0de

İlgili konular