web-dev-qa-db-ja.com

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

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

86
Webnet

i-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

115
darthwade

更新:

この回答は、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')}"
147
Cuong Vo

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

次のように使用できます。

$state.is('stateName');

ドキュメント:

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

25
Clement Hoang

私のために働いたui-sref-activeディレクティブの使用は:

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

「tgrant59が2016年5月31日にコメント」というラベルの付いたコメントの下にある here .

Angle-ui-router v0.3.1を使用しています。

1
jaycer

Angle-ui、具体的にはルートチェックを確認します。 http://angular-ui.github.io/ui-utils/

0
John Tseng