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'在此代码),你将有运行时错误,因为缓存已经建成之前,因此该功能之前定义。