0

我对 angularjs 的 select 指令有疑问。

这是我的代码:

<ul class="thumbnails">
    <li class="span4" ng-repeat="product in productsDTO">
        <div class="thumbnail">

        ...
        ...
        ...


        <div class="span4" ng-repeat="varCat in product.varietyCategoriesAndOptions">
            {{varCat.varietyCategoryName}}
            <br />

            <br /><br />

            <select ng-model="varCat.varietyCategoryOption" ng-options="varietyCategoryOptionTransfer.varietyCategoryOptionId as varietyCategoryOptionTransfer.varietyCategoryOptionValue for varietyCategoryOptionTransfer in varCat.varietyCategoryOptions">
                <option value="">Select color</option>
            </select>

        </div>

        ...
        ...
        </div>
    </li>
</ul>

我有一个 $http 调用,它返回被添加到本地范围的 json。

function getProductsByCategoryIdServiceCall(CategoryService, categoryId){
          CategoryService.getProductsByCategoryId(categoryId).success(function(data){
              $scope.productsDTO = data;
          }).error(function(data){
                  $scope.productsDTO = null;
          });
      }

所以基本上我有一组从 web 服务调用返回的 json 对象,我将本地 $scope 设置为具有这些 json 对象,并且 productsDTO 的第一个迭代标记迭代新填充的对象。

每个产品都有一个单独的对象,显示该产品有哪些特殊类别,以及这些类别的选项。我正在尝试将选择标签(ng-model)绑定到 varCat 对象。这是当前正在迭代的对象,并且同一个对象还包含我尝试为选择标记指令设置的类别的选项数组。我在品种类别对象上添加了一个特殊字段,称为品种类别选项,专门用于保存该特定选择类别的当前状态。我这样做是因为每页可能有很多这样的类别选择,并且不知道有多少,所以我不能将它硬编码到页面中。

它似乎没有工作。有人有建议吗?

所有的 json 都是很多数据,但这是产品内部的 json 返回部分,其中包含与选择框关联的所有值:

"varietyCategoriesAndOptions":{"1":{"varietyCategoryId":111,"varietyCategoryName":"color","varietyCategoryOptions":{"202":{"varietyCategoryOptionId":202,"varietyCategoryOptionValue":"red"},"203":{"varietyCategoryOptionId":203,"varietyCategoryOptionValue":"blue"}},"varietyCategoryOption":null}}

**更新* ** * ** * ** * ** * ** * *** 用户 Chandermali 说,当数据为对象格式时,我将数据视为数组格式。Chandermali 说要使用这种格式

(key, value) in product.varietyCategoriesAndOptions

我在我的选择中试过这个

<select ng-model="varCat.varietyCategoryOption" ng-options="(varietyCategoryOptionTransfer.varietyCategoryOptionId, varietyCategoryOptionTransfer.varietyCategoryOptionValue) in varCat.varietyCategoryOptions">
       <option value="">Select color</option>
  </select>

并得到这个错误:

 Error: [ngOptions:iexp] Expected expression in form of '_select_ (as _label_)? 
 for (_key_,)?_value_ in _collection_' but got 
 'varietyCategoryOptionTransfer.varietyCategoryOptionId, 
 varietyCategoryOptionTransfer.varietyCategoryOptionValue in 
 varCat.varietyCategoryOptions'.
4

2 回答 2

1

选择标签中的这种变化足以让它为我工作。

      <select ng-model="varCat.varietyCategoryOption" ng-options="value.varietyCategoryOptionId as value.varietyCategoryOptionValue for (key,value) in varCat.varietyCategoryOptions">
            <option value="">Select color</option>
     </select>

我只是在选择指令上使用了错误的格式来访问我的对象图。选择框现在正在填充数据。非常感谢您的耐心。

于 2013-12-05T04:04:49.900 回答
0

看到你的 json 既不是你的varietyCategoriesAndOptions也不varietyCategoryOptions是数组。这些是对象映射。您需要使用对象映射的语法,例如

(key, value) in expression – 其中 key 和 value 可以是任何用户定义的标识符,而 expression 是提供要枚举的集合的范围表达式。

For example: (key, value) in product.varietyCategoriesAndOptions

于 2013-12-04T06:38:01.820 回答