角度过滤器的范围下至1键类型,以准备发送

angular filter a scope down to 1 key type to prepare for send

本文关键字:类型 过滤器 范围      更新时间:2023-09-26

所以我有一个包含大量键值对的作用域,这样我就可以使用它,并在发送它之前让它做一些事情。

我遇到的问题是,在我发送之前,我想将该范围更改为id的一小部分密钥数组

所以我有一个像这样有缺陷的范围:

 $scope.myScope = {name: name 1, id: 1, order: 1},  {name: name 2, id: 2, order: 2} 

我想把它变成

$scope.FilteredScope = {1,2};

只是身份证。我想知道你是否可以在发送之前在控制器内部过滤这个范围?我只在重复中使用过过滤器。因此,在控制器内部,它会过滤掉id,并将它们放在一个新的范围内,只发送id。这可能吗?

谢谢!

您可以只使用array.map(对于较旧的浏览器可能需要polyfill):

angular.module('MyModule', [])
.controller('MyController', function( $scope ) {
    $scope.myScope = [
      {name: 'name1', id: 1, order: 1},  
      {name: 'name2', id: 2, order: 2}
    ];
  
    $scope.ids = $scope.myScope.map( function(obj){
        return obj.id;
    });
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div ng-app='MyModule' ng-controller='MyController'>
    ids: {{ids | json}}
</div>

首先如果$scope.myScope是一个正确的Javascript对象(在这种情况下,它是一个映射对象数组),它的形式应该是:

$scope.myScope = [{name: "name 1", id: 1, order: 1},  {name: "name 2", id: 2, order: 2}]

其次,如果假设您希望您的$scope.filteredScope$scope.myScope对象中所有id值的数组。

所以可以像一样轻松完成

$scope.filteredScope = []
for(entry of $scope.myScope) $scope.filteredScope.push(entry.id)

这将导致一个输出数组,如[1,2],然后您可以发送它。

请告诉我我的假设是否正确。如果没有,请用更多信息编辑您的问题,我很乐意帮助