AngularJS使用ng-options创建一个Set

时间:2014-09-09 12:38:15

标签: javascript angularjs

我有一个如下所示的数据模型(还有其他字段,但这些是最重要的):

$scope.model = [ 
    {
        id: 1, 
        country: "US"
    },
    {
        id: 2,
        country: "UK"
    },
    {
        id: 3,
        country: "DE"
    },   
    {
        id: 4,
        country: "DE"
    },    
    {
        id: 5,
        country: "DE"
    },    
    {
        id: 6,
        country: "US'
    },    
]

我想获得以下数组:

[ "US", "UK", "DE"]

为了在<select>中显示以下内容:

<select ng-model="myList" ng-options="m.country for m in model | somefilter "><select>

独特并不方便,因为它与我想要的完全相反。

2 个答案:

答案 0 :(得分:1)

Fiddle

除非我误解了你想要通过模型数组中对象的唯一属性进行过滤的问题。 唯一过滤器通过传入属性键来完成此操作:

<select ng-model="selected" ng-options="m.country for m in model | unique: 'country'">
  <option value="">choose country</option>
</select>

答案 1 :(得分:0)

正如我在上面的评论中所提到的,我认为您需要使用选择选项创建一个新的范围var,获取初始对象的唯一值 - 无论您要做什么迭代,您都必须要有比较值。所以,这样的事情应该这样做:

$scope.countryOptions = [];
for(var i=0;i<$scope.model.length;i++){
    if($scope.countryOptions.indexOf($scope.model[i].country) === -1){
        $scope.countryOptions.push($scope.model[i].country);
    }
}

现在您将在ng-options中使用countryOptions来获取唯一值

<select ng-model="myList" ng-options="item in countryOptions"><select>