2016-09-10 2 views
2

에 각 서비스에서 객체를 반환하는 방법 I가 다음과 같은 서비스를, 내가 거기에 사용할 수 있도록 내 컨트롤러에 vObjects을 좀하고 싶습니다컨트롤러

.service('indexDBService', function ($indexedDB, firebaseService) { 
    var objects = []; 
    var addToVideos = []; 
    var _this = this; 

    firebaseService.getvideosApi().then(function(response){ 
      _this.videos = response.data; 
      var userVideos = _this.videos; 
      for (var key in userVideos) { 
      if (userVideos.hasOwnProperty(key)) { 
       var video = {"file_id": userVideos[key].file_id, "filename": userVideos[key].filename, "file_status": userVideos[key].file_status, "user_id": userVideos[key].user_id, "video_avatar": userVideos[key].video_avatar, "upload_date": userVideos[key].upload_date, "file_dislikes": userVideos[key].file_dislikes, "file_likes": userVideos[key].file_likes, "downloadUrl": userVideos[key].downloadUrl} 
      addToVideos.push(video); 
      } 
      } 
      if((objects.length) < (Object.keys(_this.videos).length)){ 

      $indexedDB.openStore('userVideos', function(store){ 
       store.upsert(addToVideos).then(function(e){ 
       // do something 
       }); 
      }); 

      } 
     }); 
     //get indexDB Videos 
     $indexedDB.openStore('userVideos', function(store){ 
      store.getAll().then(function(userVideos) { 
      objects = userVideos; 
      _this.vObjects = objects; 
      }); 
     }); 
     }); 

. 컨트롤러에 _this.vObjects를 반환하거나 지나치게하려면 어떻게해야합니까?

답변

1

이것은 각도 서비스이므로 약속을 다뤄야합니다. 약속을 통해 비동기 데이터에 액세스 할 수 있으며 firebase 및 inddxdb 서비스에서 사용합니다. 당신이 _this.vobject를 사용하여 서비스의 데이터를 캐싱한다고 가정하여 매번 요청할 필요가 없습니다. 나는이

. service('indexDBService',function($indexedDB, firebaseService,$q) 

$ q를 같은 서비스에 $ q를 주입 할 것은 당신이 약속을 구성 할 수 있도록하는 API입니다. 각도 서비스에서는 메소드를이 메소드에 추가하여 메소드를 노출합니다. 귀하의 데이터를 얻기위한 방법을 만들기 위해서는 다음과 같이 구성하십시오.

this.getVobj = function(){ 

    var deferred = $q.defer() 

    if(_this.vObjects){ 
     deferred.resolve(_this.vObjects); 
    } else { 

$indexedDB.openStore('userVideos', function(store){ 
     store.getAll().then(function(userVideos) { 
     objects = userVideos; 
     _this.vObjects = objects; 
     deferred.resolve(objects); 
     }); 
    }); 
} 

    return deferred.promise; 

}; 

그런 다음 컨트롤러에 넣으면 서비스가 제공됩니다.

myModule.controller('myCtrl', function(indexDBService){ 
      indexDBService.getVobj().then(function(vObj){ 
       //Do stuff with vobj 
      }); 
});