2015-10-20 16 views
7

テーブルの行にボタンが1つずつある角度アプリを実行しています。ボタンがオンになっている行のために開かれています。ui-router:target = "_ blank"の新しいタブで開いた状態で、パラメータが失われました

この方法で作成した新しいタブにパラメータを渡す必要がありました。

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

を、ボタンは次のようなものがあります:私は状態の初期化でパラメータを宣言したのparamsはすべてが期待どおりに動作しますが、渡され

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

を。

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

しかし<a>タグにtarget="_blank"を追加すると、$ state.paramsは以下を返すために、オブジェクト原因:

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

私は時間のために検索した、私はUI-ルータのマニュアルを見てきました私の状況に対処するもののための問題トラッカーが、私は何も見つけ出していません。

target='_blank'ui-srefの状態パラメータが渡されませんか?

答えて

5

現在SPAコンテキスト(新しいウィンドウ、新しいタブ)の利用可能外でなければなりませんいずれかのパラメータがある場合 - それは、MUSTは、URLの一部で

これは動作します:のparams 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>

は何とか私はこれが可能だった知っていたが、私はURLからアクションパラメータを維持したい。これをありがとうございました。私は結果のurl '/ listings/42?action = images'を' listings/42'に変更する方法があるかどうかを尋ねたいだけです。 –

+0

答えは明らかになったはずです(私の答えの後を意味します) - それは不可能です。 URLは外部世界と話す唯一の方法です。それは新しいタブ、新しいウィンドウ、またはメールを介して送信される単なるリンクです。必要なすべてのパラメータをURLに埋め込む必要があります。今は明らかですか? –

+0

あなたはこれを明確にしました。アドレスバーに書かれたURLを '/ listing/42?action = images'の後に' listing/42'に変更する方法を尋ねました。私があなたの答えを拒否しているかのようにではなく、単にパラメータをユーザに公開したくないので、ページが読み込まれた後にURLを変更できると思っていました。 –

0

について

.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" 
}); 

詳細をURLを使用することなく、別の方法があります。 URLの代わりにLocalStorageを使用できます。

リンクタグにng-clickを使用し、関数を呼び出します。関数では、パラメータをLocalStorageに入れてください。次にapp.run$rootScope.$on("$stateChangeStart")を使用し、LocalStorageにパラメータがあるかどうかを確認します。次に、paramsを取得し、$stateparamsと呼んでください。

関連する問題