javascript – AngularJS:在$http调用后访问工厂中存储的数据

前端之家收集整理的这篇文章主要介绍了javascript – AngularJS:在$http调用后访问工厂中存储的数据前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我正在尝试构建一个工厂作为我的数据库模型的临时区域,以及一个api来执行基本的CRUD调用.我希望能够通过将数据存储在服务或工厂中来访问数据,并保持api方法,以便我可以在控制器中执行这些操作.
  1. $scope.folders = Folders.data(); // for a factory
  2. $scope.folders = Folders.data; // for a Service
  3.  
  4. Folders.create({name: "My Stuff,$oid: { 5fwewe033333 },user_id: CurrentUser.id"});

目前我在控制器中使用这样的文件夹工厂.

  1. Folders.foldersData().success( function(data,status) {
  2. $scope.folder = data;
  3. })
  4. .error( function(data,status) {
  5. Flash.warning("There was a problem fetching your data");
  6. });

我知道我可以在控制器中解决一个承诺,但是我正在研究项目的大小,我喜欢在服务中访问文件夹模型的想法,而不必进行服务器调用来同步每次我做出改变时的数据.

  1. angular.module('cmsApp')
  2. .factory('Folders',function($http,$q){
  3.  
  4. var folders = {};
  5. var messageWarn = "Upload Retrival Failed.";
  6.  
  7.  
  8. return {
  9. get: function(){
  10. var defered = $q.defer();
  11.  
  12. $http.get('/folders').success( function ( data,status ) {
  13. defered.resolve(data);
  14. })
  15. .error( function ( data,status ) {
  16. defered.reject();
  17. Flash.warning(message_warn);
  18. });
  19. defered.promise.then( function (promise)
  20. folders = promise;
  21. });
  22. },data: function (){
  23. return folders;
  24. },}
  25. });

我的问题是,在调用Folders.get()之后,我无法保持文件夹对象的持久性.在我将Folders.data()称为空对象后,它总是会回来.

有没有办法将这些数据保存在Factory中,作为Folder模型的最新表示,而不是每次都依赖于命中服务器?

在Rails 4 API上运行角度1.2.3.

解决方法

您可以将承诺存储在服务中作为服务上的对象.我将上面的扩展演示分开来演示 http://plnkr.co/edit/2HqQAiD33myyfVP4DWg3?p=preview

与前面的示例一样,http调用只进行一次,但这次将promise添加到工厂创建的服务对象上的文件夹项中.

  1. app.factory('myService',$q) {
  2.  
  3. return {
  4.  
  5. myObject: '',get: function() {
  6. // Create the deffered object
  7. var deferred = $q.defer();
  8.  
  9. if(!this.myObject) {
  10. // Request has not been made,so make it
  11. $http.get('my-file.json').then(function(resp) {
  12. console.log('Making the call!');
  13. deferred.resolve(resp.data);
  14. });
  15. // Add the promise to myObject
  16. this.myObject = deferred.promise;
  17. }
  18. // Return the myObject stored on the service
  19. return this.myObject;
  20.  
  21. }
  22.  
  23. };
  24.  
  25. });

猜你在找的JavaScript相关文章