2016-05-11 8 views
1

私はAngularJSアプリケーションを構築しており、ajaxリクエストを実行するサービスを構築しています。私の見解に必要なデータを得るためにこれらの要求が満たされると、彼らは約束をもって復帰する。私の要求は、コントローラ上で、さらにコードを実行する前に完了するまで、$ .Deferredを()を使用して約束が返された後の工場出荷時のサービスへのアクセス

。その後、()私は、しかし、私はスコーピングに関する問題を持って待つことができます。

私はそれが二度目サービスを呼び出す前に成就する約束だのを待たなければならない最初したがってから収集されたデータの一部を使用する必要がある第2の要求を実行したいです。

の問題は、私が正しくコントローラにそれを注入するにもかかわらず、.then約束()関数の中で私の工場サービスにアクセスすることはできませんです。この約束の返品で工場を利用できるようにするには、どうすればいいですか?

私のビューコントローラの機能は:

function getCategories() { 
     datacontext.getCategories() 
      .then(function (data) { 
       if (data) { 
        vm.categories = data; 
        categoriesPromise.resolve(data); 
       } else { 
        throw new Error('Error obtaining data.'); 
       } 
      }) 
      .catch(function (error) { 
       common.logger.log('error', 'Error obtaining the categories.', error, controllerId); 
      }) 
    } 

    function getUsers() { 

     // Wait until the categories are loaded 
     categoriesPromise.then(function (categories) { 
      // I want to use dataContext again here 
     }) 
    } 

私はgetUsers内categoriesPromise.then()で再びgetCategoriesで使用されるのDataContextを使用したいです()。

+0

TLDR;いくつかのコードは私たちを助ける –

+0

私のビューコントローラコードが追加されました。 –

答えて

0

はこの方法であなたの工場を作成します。

.factory("MyFactory", ['$q', function ($q) { 
      return { 
       get: function (_tagName) { 
        var deferred = $q.defer(); 
        $http.get(_tagName, function (err, result) { 
         if (err) { 
          return deferred.reject(err); 
         } else if (result) { 
          return deferred.resolve(result); 
         } 
        }); 
        return deferred.promise; 
       } 
} 
}]) 

を次に、あなたのコントローラにそれを注入:

.controller('myCtrl', ['$scope','MyFactory', 
     function ($scope, MyFactory) { 

    $scope,getData = function(){ 

    var success=function(data){ 
     console.log("Data return successfully", data); 
    },error = function(err){ 
     console.log("something went wrong", err) 
    } 

    MyFactory.get("tagName").then(success,error) 
}; 
}]); 

私は、これはあなたを助けることを願っています。

+0

私はそれがangular.module( 'アプリ') 'のような注入有する。コントローラ(controllerId、[ '$ rootScope'、 '$場所'、 '共通の'、 'のDataContext'、 'spContext'、 'userContext'、カテゴリ]) ;そしてそれはまだアクセスすることができません。 –

+0

とし、 'function categories($ rootScope、$ location、common、datacontext、spContext、userContext){' –

関連する問題