0

我有一個包含3個部分(字段名稱,運算符,值)的表單。第三部分將根據所選第一個下拉值的類型顯示。
enter image description here enter image description here在AngularJS中緩存下拉選項 - SPA

這行可以與添加按鈕來添加。
如果我在第一個下拉菜單中有類似的選擇(這需要在第三部分中類似的下拉菜單),我會在第三部分中有類似的下拉選項。
例如,如果用戶在第一行和第二行的第一列中選​​擇出生城市居住城市,我們需要城市列表,在第三列的行中,都是。
在這種情況下,我不想發送請求到服務器。
另外,如果可能的話,我不想從控制器調用服務功能。
在這種情況下最好的是什麼以及我如何實現這一點?

更新

當一個下拉菜單要進行初始化:

  • 如果在高速緩存中存在的選項值,使用它們。
  • 其他:
    • 發送到服務器的請求,並得到價值
    • 緩存中的數據下一次
+0

你有試過嗎? –

+0

你是什麼意思=在服務中緩存? – xAqweRx

+0

如果我緩存服務,即使刷新頁面,數據也會保存。但它不是我所需要的。我想使用緩存數據,直到用戶在SPA中處於當前狀態。我不知道是否清楚。 – Elnaz

回答

0

爲此,我用angular-cache和使用angular-cache.min.js

更多信息:

我注射'angular-cache'服務爲我的模塊。
然後,將我的AngularJS服務注入'CacheFactory'。此外,我需要'$q'作出響應對象。
然後:

function angularCacheSampleService($http, $q, cacheFactory, adminApiRoot) { 
    var self = this; 
    self.cacheList = cacheFactory('urlResponseCache', { maxAge: 300000, deleteOnExpire: 'aggressive' }); 


self.angularCacheSampleCompleteCode = function (dataSource) { 

      var deferred = $q.defer(); 
      //read from cache 
      var responseList = self.cacheList.get(dataSource); 
      if (angular.isUndefined(responseList)) { 
       //not found in cache 
       self.apiResponse = $http({ 
        method: 'GET', 
        cache: false, 
        url: dataSource 
       }); 

       self.apiResponse 
        .then(function (response) { 
        self.cacheList.put(dataSource, response); 
        deferred.resolve(self.apiResponse); 
       }, function (response) { 
        deferred.reject(response); 
       }); 

      } else { 
       //found in cache 
       deferred.resolve(responseList); 
      } 
      return deferred.promise; 
     }; 

注意:如果你讓你的方法內部緩存('urlResponseCache'在此代碼),你將有運行時錯誤,因爲緩存已經建成之前,因此該功能之前定義。