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

我正在尝试构建一个工厂作为我的数据库模型的临时区域,以及一个api来执行基本的CRUD调用.我希望能够通过将数据存储在服务或工厂中来访问数据,并保持api方法,以便我可以在控制器中执行这些操作.

$scope.folders =  Folders.data(); // for a factory
$scope.folders = Folders.data; // for a Service

Folders.create({name: "My Stuff, $oid: { 5fwewe033333 }, user_id: CurrentUser.id"});

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

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

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

angular.module('cmsApp')
  .factory('Folders', function($http, $q){

    var folders = {};
    var messageWarn = "Upload Retrival Failed.";


    return {
      get: function(){
        var defered = $q.defer();

        $http.get('/folders').success( function ( data, status ) {
          defered.resolve(data);
        })
        .error( function ( data, status ) {
          defered.reject();
          Flash.warning(message_warn);
        });
        defered.promise.then( function (promise)
          folders = promise;
        });
      }, 
      data: function (){
      return folders;
    },
  }               
});

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

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

在Rails 4 API上运行角度1.2.3.

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

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


app.factory('myService', function($http, $q) {

  return {

    myObject: '',

    get: function() {
      // Create the deffered object
      var deferred = $q.defer();

      if(!this.myObject) {
        // Request has not been made, so make it
        $http.get('my-file.json').then(function(resp) {
          console.log('Making the call!');
          deferred.resolve(resp.data);
        });
        // Add the promise to myObject
        this.myObject = deferred.promise;
      }
      // Return the myObject stored on the service
      return this.myObject;

    }

  };

});

转载注明原文:javascript – AngularJS:在$http调用后访问工厂中存储的数据 - 代码日志