ディレクティブ内で現在の状態を検出する方法


86

AngularUIのルーティングを使用していて、実行したいのng-class="{active: current.state}"ですが、このようなディレクティブで現在の状態を正確に検出する方法がわかりません。

回答:


115

また、ui-sref-activeディレクティブを使用することもできます。

<ul>
  <li ui-sref-active="active" class="item">
    <a href ui-sref="app.user({user: 'bilbobaggins'})">@bilbobaggins</a>
  </li>
  <!-- ... -->
</ul>

またはフィルター: "stateName" | isState"stateName" | includedByState


146

更新:

この答えは、Ui-Routerのはるかに古いリリースに対するものでした。最新のリリース(0.2.5以降)については、ヘルパーディレクティブを使用してくださいui-sref-active。詳細はこちら


元の回答:

コントローラに$ stateサービスを含めます。このサービスをスコープのプロパティに割り当てることができます。

例:

$scope.$state = $state;

次に、テンプレートの現在の状態を取得するには:

$state.current.name

状態が現在アクティブであるかどうかを確認するには:

$state.includes('stateName'); 

このメソッドは、ネストされた状態の一部であっても、状態が含まれている場合はtrueを返します。ネストされた状態にuser.detailsあり、をチェックした場合$state.includes('user')、trueが返されます。

クラスの例では、次のようにします。

ng-class="{active: $state.includes('stateName')}"

3
パラメータを持つ状態についてはどうですか?
Bradley Trager


25

ui-routerを使用している場合は、$ state.is();を試してください。

あなたはそれを次のように使うことができます:

$state.is('stateName');

毎のドキュメント:

$ state.is ... $ state.includesに似ていますが、完全な状態名のみをチェックします。


1

私のために働いたui-sref-activeディレクティブの使用は次のとおりでした:

<li ui-sref-active="{'active': 'admin'}">
    <a ui-sref="admin.users">Administration Panel</a>
</li>

見られるように、ここでコメントの下で「2016年5月31日にコメントtgrant59」とラベルされました。

私はangular-ui-routerv0.3.1を使用しています。


弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.