0

ビュー データを入力するサービスがあります。ビュー データは、データベースからフェッチされるデータに依存し、データがロードされるまで待機する必要があります。

例えば:

services.factory('viewService', function (serviceX) {
    var generateView = function (s) {
        var data=[];
        var viewData=[];
        serviceX.getData().then(function (d) {
            data=d;
        });
        console.log("data:"+d);
        for(x in data){
            viewData[x]=data[x].view;
            ....
        }
        return viewData;
    };
    return{
        generateView: generateView
    }
});

serviceX.getData()すでにpromiseパターンを使用しています。for(x in data){を生成するには、そのデータが必要ですviewData

4

3 に答える 3

1

promise を使用して懸念事項を分離する必要があります。

angular.module('myModule', [])

.factory('Table', function($resource, $q) {
  return {
    data: function() {
      edsql = edsql || '';
      var deferred = $q.defer();
      $resource('my-resource-url').get({}, function(r) {
        deferred.resolve(r);
      }, deferred.reject);

      return deferred.promise;
    }
  };
});

そして、コントローラーで次のように使用します。

$scope.data = Table.data();
于 2013-10-08T11:19:57.493 に答える
0

スコープ変数にバインドするだけです。AngularJS は自動的にデータを待機し、レンダリングを開始します。もちろん、スコープに設定する前に、コールバック関数内からフェッチされたデータを変更する必要があります。

あなたの場合、これは、サービスの generateView メソッドが、スコープ変数に設定できるプロミスを返す必要があることを意味します。

于 2013-10-08T11:16:48.170 に答える
0

別の方法は、 deferred & promise を使用することです。

詳細はこちら: http://docs.angularjs.org/api/ng .$q

于 2013-10-08T11:21:56.110 に答える