たとえばサービスでモジュールを設定した後、プログラムで $stateProvider に状態を追加する方法はありますか?
この質問にさらに背景情報を加えると、2 つのアプローチが考えられる状況があります。
- モジュール構成で定義された状態で強制的にリロードしようとすると、問題はその状態がリロード検索に設定間違いなので、試してみると$state.go('state.name', {new:param}, {reload:true});何も起こりません。何かアイデアはありますか?
状態の定義
.state('index.resource.view', {
url: "/:resourceName/view?pageNumber&pageSize&orderBy&search",
templateUrl: "/resourceAdministration/views/view.html",
controller: "resourceViewCtrl",
reloadOnSearch: false,
})
- ルーティングが適切に機能するように、サービスからロードする必要がある状態をプログラムで追加してみます。可能であれば、最初のオプションを選択します。
ベストアンサー1
更新情報については -編集- を参照してください
通常、状態は構成フェーズ中に に追加されます$stateProvider
。実行時に状態を追加する場合は、 への参照を保持する必要があります$stateProvider
。
このコードはテストされていませんが、必要な機能を果たすはずです。 というサービスを作成しますruntimeStates
。これをランタイム コードに挿入して、状態を追加できます。
// config-time dependencies can be injected here at .provider() declaration
myapp.provider('runtimeStates', function runtimeStates($stateProvider) {
// runtime dependencies for the service can be injected here, at the provider.$get() function.
this.$get = function($q, $timeout, $state) { // for example
return {
addState: function(name, state) {
$stateProvider.state(name, state);
}
}
}
});
私はいくつかのものを実装しました将来の状態でUI-ルーターの追加機能まだ存在しない状態にURLをマッピングするなど、いくつかの特殊なケースに対応しています。Future Statesでは、ランタイム状態のソースコードを遅延ロードする方法も示しています。ソースコード何が関係しているかを把握するため。
-編集- UI-Router 1.0+の場合
UI-Router 1.0では、実行時に状態を登録したり登録解除したりすることができます。StateRegistry.register
そしてStateRegistry.deregister
。
StateRegistryにアクセスするには、次のように注入します。$stateRegistry
、または注入する$uiRouter
そしてそれにアクセスするにはUIRouter.stateRegistry
。
UI-Router 1.0 には、状態定義の遅延読み込みや URL による同期も処理する Future States もすぐに使用できます。