AngularJS UI-Routerビュー内から現在の状態を取得する
-
21-12-2019 - |
質問
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.name //Return the name of current state
.
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)