在 Angular 中的 watch 函数(重置过滤器)中存储 IIFE 的原始值

Storing original values for IIFEs in watch function (reset filters) in Angular

我有一堆过滤器,我试图编写一个函数,以便在 ng-click 上将所有过滤器重置为原始值。 然而,我所有的过滤器

例如,我有一个过滤停止次数的过滤器,一切正常。

$filter('stopsFilter')($scope.data)(stopsObject);

通过http请求获取数据。当然,我对数据有一个 $watch 函数来更新基于数据的视图。在 watch 函数中有 stopsObject,因此我也可以根据 $scope.data 更新自身。由于 stopsObject 严格依赖于 $scope.data 的结构,因此没有正确的方法来预先定义 stopsObject(期望将其设置为空)。

      $scope.stopsObject = { //happens in the watch function of $scope.data
        "allCars": $scope.selectall,
        "allElements": $scope.checkedStops,
        "singleElements": $scope.stopsPerLeg
      };

$scope.stopsPerLEg 和 checkedStops 也是 watch 函数中的 IIFE。每当我更新 allElements 时,整个 stopsObject 都会更新。

但是要为我所有的过滤器写一个重置函数

         $scope.allFilters = {
            stopsObject:$scope.stopsObject,
          };

$scope.resetFilter = function() {

            $scope.stopsObject=$scope.allFilters.stopsObject;

          };

这不起作用,因为 stopsObject 会不断更新。如何将原始计算的 $scope.stopsObject 设置到我的 allFilters 对象中。我基本上需要在 HTTP 请求完成后立即计算的值。

有什么建议吗?

如果你只是做一个angular.copy比如

$scope.allFilters=angular.copy({...})

它完美运行。