AngularJS - UI ルーター - プログラムで状態を追加する 質問する

AngularJS - UI ルーター - プログラムで状態を追加する 質問する

たとえばサービスでモジュールを設定した後、プログラムで $stateProvider に状態を追加する方法はありますか?

この質問にさらに背景情報を加えると、2 つのアプローチが考えられる状況があります。

  1. モジュール構成で定義された状態で強制的にリロードしようとすると、問題はその状態がリロード検索に設定間違いなので、試してみると$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. ルーティングが適切に機能するように、サービスからロードする必要がある状態をプログラムで追加してみます。可能であれば、最初のオプションを選択します。

ベストアンサー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 もすぐに使用できます。

おすすめ記事