2012-08-13 9 views
49

テンプレート($ location.pathの内容)のurlから現在のパスが必要です。しかし、私はコントローラがたくさんあるのでコントローラ経由ではありません(そして、私は$scope.currentUrl = $location.path;の宣言を複製したくありません)。アドバイスをいただきありがとうございます。

答えて

88

AngularJSテンプレートはスコープ内で利用可能なものだけを見ることができるため、$ locationサービスをスコープに配置する必要があります。 $ rootScopeというAngularJSアプリケーションではいつでも利用可能なスコープが1つありますので、あなたのユースケースに使用できます。あなたは何ができるか

は$ rootScopeで$場所を公開するモジュールのrun()メソッドを使用することです:

var myApp = angular.module('myApp', []).run(function($rootScope, $location) { 
    $rootScope.location = $location; 
}); 

これはあなたにそう以降のすべてのテンプレートに「場所」は利用可能になるだろう行うことができますテンプレートに:

Current path: {{location.path()}} 
+1

独自のスコープのディレクティブテンプレートでは、現在のパス:{{$ parent.location.path()}} ' – benweet

+0

を使用する必要があります。' {{$ root.location。 xxx}} 'スコープが分離されているディレクティブは省略形の方法ではアクセスできず、' $ parent.location'はスコープの深さによっては信頼できないためです。 '$ root'は常に動作します。 –

0

代替は、コントローラでは、ui-routerよりセマンティックと汎用性を使用retrieve the current state、および$scopeに保管することです:

app.controller('MyCtrl', ['$scope', '$state', function MyCtrl($scope, $state) { 
    $scope.state = $state.current.name; 
    ... 
} 
+0

なぜ私は聞くかもしれないdownvotes? –

+0

私のためにうまくいった。 –

+0

私はdownpotesがおそらくOPがui-routerを使用していても(この問題だけでは移行するのに十分な理由ではない)、これは通常はURLのパスとは全く異なる状態名を返しますparams)。たとえば、私のアプリケーションでは、パス: "/ graphs/56ce3/edit"に対して、コードは状態の名前 "edit.graph"を返します。 HyperboleとHalfの言葉で言えば、その解決策は、私が持っているものとは異なる問題です。 :) – 0x24a537r9

関連する問題