angularJS: 在控制器之间共享过滤后的数据

angularJS: share filtered data between controllers

在控制器之间共享数据是这里经常讨论的话题,我通过创建一个 factory 来解决它,它包含调用我们的 API 的函数,当然还有 returns 我们的数据。

angular.factory('polygonService', ['$resource', polygonService]);

function polygonService($resource) {


    var service = {

        data: [],

        api: $resource(
            'url', 
            {
                cityID: '@id'
            }, 
            {
                get: { 
                    method: 'JSONP', 
                    params: {
                        callback: 'JSON_CALLBACK'
                    }
                }
            }
        )


    }


    return service;

}

现在,此服务中的 data 显示在地图和列表中。这是两个独立的指令和控制器。

list 指令允许用户通过各种属性过滤数据,但过滤后的数据仅在 list 指令的 $scope 内可用。

如何使过滤后的数据可用于地图控制器的 $scope?

我是否必须在服务中创建一个 filteredData 属性 并从地图控制器中 $watch ?

您将需要通过该服务公开过滤后的结果,但您不需要观看它。

在您的控制器中为您的服务设置一个范围变量

$scope.polygonService = polygonService;

然后,您可以从您的控制器访问 $scope.polygonService.filteredData,或从您的视图访问 polygonService.filteredData,两种方式的绑定将按预期工作。

<li ng-repeat="data in polygonService.filteredData">
  {{ data }}
</li>