2013-04-28 12 views
12

AngularJSコントローラ内でURLのパラメータを読み取るにはどうすればよいですか?AngularJS:コントローラ内から経路パラメータを読み取る

私はhttp://localhost/var/:valueのようなURLを持っていて、/var/:value URLのコントローラ内の変数に値を格納したいとします。

私は$routeParams.valueと​​を使用してみましたが$routeParamsは、冒頭で定義されていないと$routeが動作しません。

+0

「$ routeParamsは最初は定義されておらず、$ routeは機能しません」とはどういう意味ですか?あなたはそれらを動作させようとしたところでコードを共有できますか? $ route.currentと$ routeParamsの両方は、コントローラプロバイダにルートと注入された依存関係をコントローラに設定した正しい結果を与える必要があります。 –

答えて

15

問題は、おそらく$routeParamsまたは$routeを、ルート変更が発生する前に実行されているコントローラに注入することです。あなたのメイン/マスター/ページコントローラ。

特定のルート(ルートを定義するときにcontrollerプロパティで指定)のコントローラーに注入すると、それが機能します。

てみ

$scope.$on('$routeChangeSuccess', function (ev, current, prev) { 
    // ... 
}); 
+1

あなたは絶対に正しいです。クライアントは接続時にURLを直接呼び出すため、ルート変更が発生する前にコントローラが実行されます。 経路変更がないため、投稿されたコードは機能しません。この問題を解決するための他の提案はありますか? – ctitze

+3

AngularJSがルーティングを処理せずにクライアントが直接URLにヒットした場合、 '$ routeParams'を使用することはできません。 '$ routeParams'は' $ routeProvider.when(/ movies /:genre、{...}) 'を使用している場合にのみ動作します。そうでなければ、手動で値を抽出する必要があります。質問:AngularJSルーティングを使用していますか、またはURLから値を抽出する方法を探していますか? – Martin

+0

私は 'ng-view'(角表現型)に異なる' templateUrls'をロードしたいので、私はルーティングのためにAngularJSを使用しています。しかし、答えがありがとう、私は別のアプローチで私の問題を解決する必要があるようです。 – ctitze

3

要件を使用するようにコードを変更するには:

function functionName($scope, $routeParams){$scope.value = $routeParams.valName;} 

HTMLビュー:

Route provider set up as: http://localhost/var/:valName 

機能として設定アプリのモジュールである 'ngRoute' を確認してください:

{{value['valName']}}