在HTTP仍在进行时过滤Angular

时间:2015-03-25 08:37:47

标签: javascript angularjs http filter angularjs-filter

我遇到了问题,我无法绕过它。

我发送一个http请求从API检索数据。这可能需要15 seconds。但我实现了一个缓存,以便用户可以看到已经到达的部分数据。每1500ms我都会更新此数据。一旦data.length>0,我向用户显示过滤器,以便他可以按价格过滤他的结果。

当他应用过滤器时,所有过滤器都会在每次更新数据后重新设置为原始状态。

$scope.$watch('trainRequest.getRequest()',function(newVal,oldVal){
        $scope.data = trainRequest.getRequest();
        $scope.trainArray = resultService.trainArray;


        if($scope.data.error!==1){
// here I generate the minimum and maximum price in the data that I use to show the filter.
$scope.maxValue=(function(){
            var tempArray=[];
            for(var i=0;i<$scope.data.length;i++){
              tempArray.push($scope.data[i].price); // jshint ignore:line
            }
            return tempArray.length>0 ? Math.round(Math.max.apply( Math, tempArray)) : 5000;
          })();

          $scope.minValue=(function(){
            var tempArray=[];
            for(var i=0;i<$scope.data.length;i++){
              tempArray.push($scope.data[i].price); // jshint ignore:line
            }
            return tempArray.length>0 ? Math.round(Math.min.apply( Math, tempArray)) : 0;
          })();
}

这是我的问题。我们假设数据提供100$1000$作为价格数组的最小值和最大值。然后我的滤镜(滑块)在此间隔内移动。但我们现在说用户只接受800作为最大价格。然后他使用滑块和显示更新的数据。

然后数据更新,因为我从服务器接收新数据。我们现在说实际最大值为1400$。然后滑块范围从1001400。碰巧的是滑块设置为这种状态,我希望滑块保持在800 $最大值。

我的问题是每次$scope.data更新(因为它在watch函数中,而maxValue也在那里)我无法按照用户的需要保存状态。

如果用户更改了过滤器的状态而不是$scope.data的更新,那么如何才能保存过滤器的状态?

1 个答案:

答案 0 :(得分:1)

您的范围内需要另一个属性,例如$scope.selectedMaxValue。此属性将包含用户选择的最大值。如果与更新前的$scope.maxValue不同,则不应更改$scope.selectedMaxValue,如果它与您应更新的$scope.maxValue相同。

您也可以使用minValue的方法。

修改: 以下是如何执行此操作的示例。

您可以编写以下功能

    function updateMaxValue(){
  var tempArray=[];
            for(var i=0;i<$scope.data.length;i++){
              tempArray.push($scope.data[i].price); // jshint ignore:line
            }
            var newValue = tempArray.length>0 ? Math.round(Math.max.apply( Math, tempArray)) : 5000;

    if($scope.selectedMaxValue === $scope.maxValue)
    {
        $scope.selectedMaxValue = newValue;
    }

    $scope.maxValue = newValue;
}

并像这样使用

    $scope.$watch('trainRequest.getRequest()',function(newVal,oldVal){
        $scope.data = trainRequest.getRequest();
        $scope.trainArray = resultService.trainArray;


        if($scope.data.error!==1){
         // here I generate the minimum and maximum price in the data that I use to show the filter.
         updateMaxValue();

         updateMinValue();
}