2015-10-20 18 views
7

Bir tablonun her birinde bir düğmenin olduğu bir açısal uygulama yapıyorum ve bu düğmelerin tıklanması üzerine yeni bir sekme olmalı Düğmenin açık olduğu satır için açıldı.ui yönlendirici: target = "_ blank" ile yeni sekmede açık durumu, paramlar kayboldu

Parametreleri bu şekilde oluşturulan yeni sekmeye geçirmem gerekiyordu. Ben devlet başlatma parametreyi ilan ettik:

.state('viewlisting', { 
    url: "/listings/:id", 
    params: { 
    'action': '', 
    }, 
    controller: 'ListingsController', 
    templateUrl: "partials/listings/view_listing.html" 
}); 

ve düğme böyle bir şey vardır: parametreler içinde geçirilen

ui-sref='viewlisting({id:"+data+", action:"images"})' 

beklendiği gibi, her şey çalışıyor.

//URL: /#/listings/42 
$state.params.action //returns "images" 
$state.params.id //returns "42" 

Ama <a> etiketine target="_blank" ekleyerek aşağıdaki dönmek için $ state.params nesne neden:

saatlerce aramalara
//URL: /#/listings/42 
$state.params.action //returns "" 
$state.params.id //returns "42" 

, ben ui-yönlendirici belgelerine baktım ve durum izleyicimi durumumu ele alan bir şey için sorun ama hiçbir şey bulamadım.

Durum parametreleri target='_blank' 'da ui-sref bağlantılarından geçmiyor mu?

cevap

5

akım SPA bağlamında (yeni pencere, yeni sekme) dışında kullanılamaz olmalıdır herhangi bir parametre varsa - bu must url parçası olmak.

Bu çalışacaktır:

.state('viewlisting', { 
    // instead of this 
    // url: "/listings/:id", 
    // this will keep the action in a new window 
    url: "/listings/:id?action", 
    params: { 
    'action': '', 
    }, 
    controller: 'ListingsController', 
    templateUrl: "partials/listings/view_listing.html" 
}); 

Daha fazla bilgi URL kullanarak olmadan başka yolu yoktur How to pass parameters using ui-sref in ui-router to controller

+0

//in page controller: var openNewTab = function() { localStorage.newTab = JSON.stringify({ state: "yourState", params: { param1: "someparam1", param2:"someparam2" } }); window.open(document.location.origin); } //angular app run config: angularApp.run(function($state){ if(localStorage.newTab){ var newTab = JSON.parse(localStorage.newTab); localStorage.removeItem("newTab"); $state.go(newTab.state, newTab.params); event.preventDefault(); } })
<a ng-click="openNewTab()" >open new tab</a>

nedense bu mümkün olduğunu biliyordum ama URL'den eylem parametresini tutmak istedim .. Bunun için teşekkür ederiz. Sadece sonuçta oluşan url '/ listings/42? Action = images'' 'listings/42'' i değiştirebileceğim bir yol olup olmadığını sormak istiyorum. –

+0

Cevap şu an açık olmalıydı (yanıtımdan sonra demek istiyorum) - HAYIR. URL, sadece dış dünyayla nasıl konuşulacağıdır. Ve bu yeni sekme, yeni pencere ya da sadece bir e-posta yoluyla bir bağlantı. Gerekli tüm parametreler URL'ye gömülmelidir. Şimdi açık mı? –

+0

Bunu gayet iyi yaptınız, adres çubuğunda yazılan URL’nin 'listings/42' AFTER'/listings/42? Action = images' olarak nasıl değiştirileceğini soruyordum. Cevabınızı reddediyormuşum gibi değil, sadece parametreyi kullanıcıya göstermek istemiyorum, bu yüzden sadece sayfanın yüklenmesinden sonra URL'yi değiştirebilir miyim diye düşünüyordum. –

0

parametreler hakkında. URL yerine LocalStorage'u kullanabilirsiniz.

Bağlantı etiketinde ng-click kullanın ve bir işlevi çağırın. Fonksiyonda parametrelerinizi LocalStorage'a yerleştirin. Sonra app.run'da $rootScope.$on("$stateChangeStart") kullanın ve LocalStorage parametrelerinin olup olmadığını kontrol edin. Ardından, params numaralı telefonu alın venumaralı telefonu params ile arayın.

İlgili konular