2016-10-13 19 views
0

私はangularjsをかなり使い慣れていて、いくつか質問したいと思います。 私はサーバーからフォームオブジェクトを取得する必要があるプロジェクトに取り組んでいます。フォームは、多くのレイヤーを持つ複雑なツリーオブジェクトであり、対応するオブジェクトにバインドするために4つの異なるコンポーネント/タブを作成しました。データを取得するためのサービスを作成しました。私はどちらかの "キャッシュを!" の印刷されたAngularjs 1.5.xはコンポーネント間のサービスとデータを共有します

angular.module('page1Summary', ['formService']).component('page1Summary', { 
    templateUrl: 'page1-summary/page1-summary.template.html', 
    controller: ['FormService', function Page1SummaryController(FormService) { 
    var ctrl = this; 

    // ******* Init Params Start *********** // 
    this.$onInit = function() { 
     // init value when object ready 
     FormService.getForm() 
     .then(
      /* on success */ 
      function successCallback(data) { 
      console.log("page1-summary init"); 
      ctrl.form = data; 
      console.log("page1-summary got the data"); 
     }, 
      /* on error */ 
      function errorCallback(data) 
      { 
       console.log("failed to get form"); 
      } 
    ); 
    } 

    /* other stuff here */ 
} 

angular.module('myService', ['restangular']) 
     .factory('FormService', ['Restangular', '$q', function(Restangular, $q) { 

    function FormService() { 
     var self = this; 
     self.form = null; 

     self.getForm = function getForm(id) 
     { 
      var deferred = $q.defer(); 
      if (self.form !== null) 
      { 
       deferred.resolve(self.form); 
       console.log("Cache!"); 
      } 
      else { 
       Restangular.one('form', id).get() 
        .then(function successCallback(response) 
        { 
        self.form = response; 
        deferred.resolve(response); 
        console.log("from server!"); 

        }, function errorCallback(response) { 
        deferred.reject(response); 
        console.log("error, cannot resolve object"); 
        }); 
      } 
      return deferred.promise; 
     } 

     return new FormService(); 
    }]) 
}); 

は、その後、私は以下の同様の設定ですべての私のコンポーネントを持っていましたgetFormサービスの "from server"のいずれかです。サーバーやメモリからデータを引き出しているかどうかを調べることができます。ただし、リフレッシュするたびに結果が異なります。ときどき、データはサービスのローカル変数に保存され、キャッシュされますが、時には自分のページの一部が "サーバーから"データを取得します。

何が問題になるのですか?私はサービスがサーバーから初めて得られると考えましたが、そうでないようです。

誰かが私を助けてくれて、私が間違ったことを指摘できますか?

ありがとうございます!

答えて

0

結果をself.formにキャッシュしています。 FormSerivce工場メンバー。self.formは再び変数です。 ページを更新しないと結果がキャッシュされます。 ページを更新すると、self.formの値はアプリケーションの他のすべての変数と同じようにリセットされます。

結果をキャッシュする代わりに、self.formにあるものをlocalstorageにキャッシュします。 ページが更新された後でも結果を返すことができます。

関連する問題