質問

私のアプリでは、resolve句を使用してサーバーからさまざまなリソースを取得する州があります。

私はまた、これらのリソースへのアクセスが必要な global コントローラを持っています。たとえば、これらのリソースのデータを表示する必要があるブレッドクラムを検討してください。

グローバルコントローラからこれらのリソースにアクセスする方法は?州オブジェクトを手に持っていても、解決されたプロパティの抽出方法を理解することはできませんでした。

編集: ui-router パッケージを使用しています。

役に立ちましたか?

解決 2

アイデアは、必要なデータに依存する解決キーを追加することです(下記のコードのbreadcrumbを参照)。このキーの機能が呼び出されたら、データitemが使用できるようになっていることを保証できます。次に、状態(dataプロパティ)に入れます。

.state('some.item.detail.state', {
  url: '/:itemId',
  resolve: {
    item: function($stateParams, MyServerResource) { 
            return MyServerResource.get({itemId: $stateParams.itemId}).$promise;
          },
    breadcrumb: function(item) {
                  this.data = item;
                }
  },
  templateUrl: 'myTemplate.html'
}
.

グローバルコントローラのデータを消費するには、$state.current.dataを簡単に検討します。

他のヒント

私はそれを理解しているようにあなたはこのようなものを持っています:

  .when('/', {
    controller: 'HomeCtrl',
    templateUrl: 'home.html',
    resolve: {data: someDataFetcher}
  })
.

グローバルコントローラのデータにアクセスする必要があります。私はあなたが欲しいものを完全に理解するためのコード例を見る必要があるでしょうが、私は共有サービスを使うことをお勧めします。

function HomeCtrl (data, myDataService) {
  myDataService.data = data;
}

function GlobalCtrl (myDataService) {
  myDataService.data // => The data
}
.

サービスには1つのインスタンスが1つしかありません。コントローラ間で状態とリソースを共有するために使用するのは簡単です。

これが役立つことを願っています。

更新

解決閉鎖を作成する:

var myResolveClosure = function (resolver) {
    // Return a wrapper around the resolver
    return function (globalController, $q) { 
      var deferred = $q.defer();
      resolver($q).then(function (data) {
        globalController.addData(data);
        deferred.resolve(data);
      }).catch(function () {
        deferred.reject();
      });
      return deferred.promise;
    }
}

  .when('/', {
    controller: 'HomeCtrl',
    templateUrl: 'home.html',
    resolve: {
     data: myResolveClosure(function ($q) {
       var deferred = $q.defer();
       // do something and resolve with the data
       return deferred.promise;
     })
    }
  })
.

基本的にあなたはそのデータを取得するために必要な特定のレゾルバを渡します。"MyResolveClosus"はリゾルバの周囲に関数をラップし、いくつかのフェッチを実行するために特定のリゾルバに$ Qを渡します。その後、特定のリゾルバから解決され、それをグローバルコントローラに渡してから、それを解決してから、指定したコントローラもデータを取得するように解決します。

これが理にかなっていることを願っています: - )

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