2014-01-10 16 views
10

私は、プロジェクト内で状態ベースのルーティング(Angular UI Router v0.2.7)を使用しており、指定されたURL文字列から現在の状態(名前)を取得する方法を探しています。以下のような角度UIルータでURL文字列から状態を取得

何か:

$state.get([urlString]) returns stateName:String or state:Object 

は私がいないすべてのURLは私のプロジェクトでの状態にマッピングされているので、状態が与えられたURLに存在しているかどうかを確認するために、この方法が必要になります。 Play Frameworkをバックエンドとして使用すると、一部のURL(ログインフォームなど)は、別のテンプレートを使用しているため、アプリケーションの角(主)部分を使用しているため、状態にマッピングされません。 「角度のない」ページ(状態ではカバーされていない)については、リロードを行います。状態によってカバーされていないURLを特定するには、上記の方法が必要です。このようにそれを行うことを計画:

$rootScope.$watch(function() { return $location.path(); }, function(newUrl, oldUrl) { 
    if(newUrl !== oldUrl) { 
     if (!$state.get(newUrl)) { 
      $window.location.assign(newValue); 
     } 
    } 
} 

はすでにdocuをチェックしますが、そのような方法がありません。

アイデア?

+0

URLはAngularjsプロジェクトの範囲外ですか?あなたは例を挙げることができますか? –

+0

はい、一部のURLはバックエンド(Playフレームワーク)によって処理されます。上記の詳細をいくつか追加しました。 – cnmuc

+0

誰がどのルートを取得するかを制御できる 'routes'ファイルがあります。あなたのURLのルート '/'でangularjsを設定し、すべてのAPI呼び出しを '/ api'から再生するようにリダイレクトすることができます。 Angularjsはそれについて心配する必要はありません。ユーザーにAPI URLを与えてはいけません。 –

答えて

1

それはすべてかどうかです。 ui-routerを使用する場合は、すべてのURLが状態に解決されていることを確認してください。状態が存在しない場合はotherwiseの状態になります。オプションのパラメータを持つことは可能です。

代わりに.htaccessリダイレクトを使用してURLをキャッチし、ui-routerに当たる前にリダイレクトします。

詳細を提供して、最適なオプションが何であるかを確認できます。

+0

すばやい返信をありがとう!そうでなければ、トリックをすることができると思う、私はそれを試してみましょう、あなたに知らせる。 – cnmuc

1

これを使用してみると、現在の状態名が表示されます。

var stateName = $state.current.name; 
関連する問題