使用" ng-options"填充选项在AngularJS中

时间:2015-09-11 12:43:06

标签: javascript json angularjs javascript-objects

我有一个下拉菜单,我需要使用AngularJS填充价格。不幸的是,返回的JSON结构并不简单,我无法更改它,因为它属于遗留系统。

以下是JSON的示例:

[
    {"name" : "simpleObjectName", "price" : "27.00"},
    {"name" : "simpleObjectName2", "price" : ["26.99", "27.00", "28.00"]},
    {"name" : "complexObjectName1", "availability" : { "price" : ["25.59", "26.40", "27.50"], "availability" : "AVAILABLE"}},
    {"name" : "complexObjectName2", "availability" : { "price" : ["42.99", "22.00", "237.00"], "availability" : "UNAVAILABLE"}},
    {"name" : "complexObjectName3", "availability" : { "price" : ["23.99", "216.00", "21.00"], "availability" : "UNAVAILABLE"}},
    {"name" : "complexObjectName4", "availability" : { "price" : "21.00", "availability" : "AVAILABLE"}}
]

只有在可用性设置为AVAILABLE时,我才需要在此下拉列表中显示下面的simpleObjects的价格以及complexObjects的价格。

我是棱角分明的新手,不知道当你有这样的结构时是否有办法显示价格。有什么东西可以用吗?我尝试过滤器,但开始出现一些错误,不得不恢复更改。

编辑:更新为JSON。发现可能存在与报价和颜色差异相关的多个价格。我需要显示所有可用的complexObjects和simpleObjects的所有价格。

3 个答案:

答案 0 :(得分:1)

您可以按如下方式在ng-repeat中显示对象:

<div ng-app="App" ng-controller="MainCtrl">
    <select ng-model="selectedItem" ng-options="c as (c.name + ' - ' + c.price + c.availability.price) for c in containers">
        <option value="">--select --</option>
    </select>
</div>

并过滤掉控制器中不可用的项目:

$scope.containers = [yourcontainerjson].filter(function ($c) {
        if ($c.availability === undefined || 
            $c.availability.availability == 'AVAILABLE') {
            return $c;
        }
 });

您还可以定义过滤器模块并将其应用于ng-repeat。 Plunker

答案 1 :(得分:0)

更新了LINK

HTML code:

<div ng-app="App" ng-controller="MainCtrl">
        <h3>Option 1 (standard)</h3>

    <select ng-model="selectedItem" ng-options="c as (c.name + ' - ' + c.price + c.availability.price) for c in containers">
        <option value="">--select --</option>
    </select>

</div>

答案 2 :(得分:0)

您可以将ng-repeat-startng-repeat-endng-if

一起使用

请参阅此Demo

<强>标记

<select>
  <option ng-repeat-start="r in records" ng-if="r.price">{{r.name}}-{{r.price}}</option>
  <option ng-repeat-end ng-if="!r.price && r.availability && r.availability.availability == 'AVAILABLE'">{{r.name}}-{{r.availability.price}}</option>
</select>