2014-09-27 57 views
0

我試圖在服務中存儲API響應,以便我可以在我的視圖中訪問它。在服務中存儲API響應

以下是我的服務中的功能。它通過我的控制器訪問時可以完美工作,但我只想運行一次此API調用,然後將結果存儲在服務單例中。我正在使用https://oauth.io/docs/api-reference/client/javascript的Javascript API來訪問用戶信息。

getUser: function() { 

    var deferred = $q.defer(); 
    var promise = authorizationResult.me().done(function(user_info) { 
     username = user_info.alias // username is defined outside of function 
     deferred.resolve(user_info); 
    }); 

    return deferred.promise; 
    } 

,然後我有存儲功能:

storeUser: function() { 
     return username; 
    }, 

我已經玩了,在我的最新嘗試,我試圖通過另一家工廠調用的getUser()方法。重要的部分是我只想調用getUser()一次。然後在我的控制器中,我想依靠storeUser()來訪問我需要的數據。

這是當前的getUser在我的控制器()調用:

twitterService.getUser().then(function(data){ // I need to change this to storeUser() 
     $scope.datapls(data.alias); 
    }); 

謝謝!我感謝任何和所有的幫助。

回答

0
You can use $cookiesStore of Angularjs for this. Inject $cookiesStore in your Service. 
Then When u call your API For First Time Store username in cookies like this 

//Add Cookie Storing Code in Your Function 
getUser: function() { 

     var deferred = $q.defer(); 
     var promise = authorizationResult.me().done(function(user_info) { 
     username = user_info.alias // username is defined outside of function 
     $cookies.userName=username// Storing UserName in Cookies.... 
     deferred.resolve(user_info); 
    }); 
    return deferred.promise; 
} 

//Change Your Storage Function Like This 
storeUser: function() { 
    return $cookies.userName; //Return Username Stored in Cookies 
}, 
0

想通了。

我擴展了其他工廠的想法。

我打電話的getUser()函數使用此工廠

app.factory('InitEverything', function(twitterService, $q) { 

twitterService.initialize(); 
    var deferred = $q.defer(); 
    var promise = twitterService.getUser().then(function(data) { 
      console.log("init ran"); 
      deferred.resolve(data); 
     }); 

    return deferred.promise; 
}); 

然後我將其稱爲呼叫從我的控制器InitEverything如下:

InitEverything.then(function(){ 
    if (twitterService.isReady()) { 
    $scope.userhandle = twitterService.storeUser(); 
    $scope.datapls($scope.userhandle); 
    } 
}); 

所以看起來我需要鏈條2承諾一起,以便getUser() - > storeUser()的異步調用將與控制器一起加載。