質問

Ui-routerのドキュメントから取られた次の状態を考慮すると:

.state('state1', {
  url: '/state1',
  templateUrl: 'partials/state1.html'
  controller: 'State1Ctrl'
})
.state('state1.list', {
  url: '/list',
  templateUrl: 'partials/state1.list.html',
})

そして、"partials/state1"のコントローラ。状態"state1"のための"html":

.controller('State1Ctrl', function () {

});

コントローラ内またはテンプレート内から決定する組み込み機能はありますか、コントローラ/テンプレートがどのような状態に関連付けられていますか?

例えば:

.controller('State1Ctrl', function ($state) {
  console.log($state.this); // state1
});

また、組み込みのソリューションがない場合、この情報を含めるために$stateまたはstat stateParamsをどのように「飾る」でしょうか?

私が思いついた唯一の解決策は、state stateを使用することです。get()を実行し、コントローラまたはテンプレートの値を持つ状態を見つけます。しかし、これは信じられないほど厄介なようです。

役に立ちましたか?

解決

これがどこにでも文書化されたものではないので、私はソースコードを見ました。

UI-View要素に添付されている$ UIViewという名前のデータフィールドがあり、ビュー名と関連状態が含まれています。あなたはこの状態をこのようなものにすることができます:

elem.closest('[ui-view]').data('$uiView').state
.

または

さえ
elem.inheritedData('$uiView').state
.

他のヒント

このような現在の状態設定を行うオブジェクトにアクセスできます。

$state.current
.

詳細については $ State Documentation

後に続くことができます、

$state.current.name //Return the name of current state
.

を参照できます。 P=プレビュー "REL=" NOREFERRER ">例表示:

state1
{
  "url": "/state1",
  "template": "<div>state1 <pre>{{current | json }}</pre><div ui-view=\"\"></div> </div>",
  "controller": "State1Ctrl",
  "name": "state1"
}
list
{
  "url": "/list",
  "template": "<div>list <pre>{{current | json }}</pre></div>",
  "controller": "State1Ctrl",
  "name": "state1.list"
}
.

コントローラ:

.controller('State1Ctrl', function($scope, $state) {

  $scope.current = $state.current

});
.

extend:上記の例では常に現在の状態を返します。

<a ui-sref="state1.list.detail({detailId:1})">....
.

各コントローラには、同じ状態が付属しています。$ STATE( "state1.list.detail")。

なぜですか? Beauseこの状態には十分な情報があり、すべてのビュー(階層的にネストされている)とそれらのコントローラが必要です。

のすべてを観察することができます
$state.$current // not .current
.

ここ CITE:

さらに、ユーザーはカスタムデコレータを添付できます。これにより、状態の内部定義内に新しいプロパティが生成されます。現在、内部状態へのアクセス(すなわち、 current )のアクセスのための明確なユースケースはありません。ただし、追加のメタプログラミング機能を導入するため、これがますます関連性になると予想されます。

しかし:今回の controller $state.current'state1.list.detail'から情報を取得する方法はありません。何らかの反復でさえ、いくつかの$state.$currentを検索することは信頼できません。 1つのコントローラinstanceは、さまざまな$stateとして多くのビューに使用できます。また、私の経験から、私はそのような情報を知る必要があるとき、私はどんなケースを覚えていません...今すぐこれで少し明確な

現在の状態名、$ state.current.name

を探している場合に便利です。

もわからないのは、0.3.1ではこれを使用して現在の状態を取得できます。

$state.$current.name
.

そしてチェックを実行する:

$state.is('contact.details.item');
.

ドキュメント: https:// ui.-router.github.io/ng1/docs/0.3.1/index.html#/api/ui.router.state $ state

を示すコードから「コントローラ」の作業「コントローラ」。
.controller('State1Ctrl', function ($state) {
    console.log("Current State: ", $state.current.name);
});
.

現在の状態を確認したい場合

console.log("state", $state.current)

現在の状態名の名前を確認したい場合

console.log("statename", $state.current.name)

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top