使用AngularJS从对象创建下拉列表

时间:2017-12-19 18:13:36

标签: javascript angularjs

所以,我想获得具有价值的特定键并将它们推送到将用于ng-repeat的新数组,我花了几天时间找到一些解决方案......

我有对象

{"id": 5, "code": "05", "name": "Apple", "item": "907520193", "item2": "3234234234", "item3": "4343232", "item4": "32342342", "item5": "78979" }

我想在仅使用此键项目,项目2,项目3,项目4,项目5 (第一项没有数字)的角度中使用下拉/选择框。

2 个答案:

答案 0 :(得分:4)

使用对象键,数组过滤器和地图来实现这一目标,



let obj = { "id": 5, "code": "05", "name": "Apple", "item": "907520193", "item2": "3234234234", "item3": "4343232", "item4": "32342342", "item5": "78979" };
let arr=Object.keys(obj).filter((key)=>key.indexOf('item')>-1).map((key)=>obj[key]);
console.log(arr);




答案 1 :(得分:0)

这是一种更“有棱角”的方式。此示例将迭代键。在代码中,k是关键,v是值。它将在第三个属性处启动选项(如果数据分散,请参阅下面的注释)。我将其设置为在下拉列表中显示键,并将值设置为值。你当然可以只使用其中一种,交换它们等等。

我更喜欢这种方法而不是生成数组,因为它不需要完成两次迭代(首先是通过预处理,然后是显示)。

  

如果您不知道项目的开始位置,可以改用:<option ng-repeat="(k,v) in data" value="{{v}}" ng-if="k.indexOf('item') > -1">{{ k }}</option>

var app = angular.module('app', []).controller('controller', controller);

function controller($scope) {

  $scope.data = {
    "id": 5,
    "code": "05",
    "name": "Apple",
    "item": "907520193",
    "item2": "3234234234",
    "item3": "4343232",
    "item4": "32342342",
    "item5": "78979"
  };

}
<!DOCTYPE html>
<html ng-app="app">

<head>
  <script src="//code.angularjs.org/1.6.0/angular.min.js"></script>
  <script src="script.js"></script>
</head>

<body ng-controller="controller">

  <select name="repeatSelect" id="repeatSelect" ng-model="selected">
    <option ng-repeat="(k,v) in data" value="{{v}}" ng-if="$index >= 3">{{ k }}</option>
  </select>

  <hr /> {{ selected }}

</body>

</html>