我对 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'.