我有一个简单的ng-repeat迭代遍历一个对象数组。
ng-repeat包含一个ng-model输入元素,我需要使用动态值作为数组索引。可能非常不清楚的解释所以这里是代码:
<div ng-repeat="property in current_data.object_subtype.object_property_type" ng-init="set_input_state()" class="input-group ng-scope disabled">
<span class="input-group-addon">{{property.name}}</span>
<input type="text" placeholder="{{property.name}}" ng-model="current_data.properties[getIndexFromId(current_data.properties, property.object_property_type_id)].value" class="form-control" disabled="disabled">
问题是输入保持为空。我已经测试了一些组合并发现它可以工作:
getIndexFromId(current_data.properties, property.object_property_type_id) == 0
current_data.properties[0].value
给出预期输出所以某种方式getIndexFromId(current_data.properties, property.object_property_type_id)
不被Angular很好地接受,或者我在某处犯了一个愚蠢的错误......
有谁知道这有什么问题?
谢谢!
[编辑]
以下是所有这些背后的数据示例:
{
"id": 1,
"name": "Robert Smith",
"object_subtype_id": 1,
"object_subtype": {
"id": 1,
"description": "Manager",
"object_property_type": [
{
"id": 1,
"description": "Phone number"
},
{
"id": 2,
"description": "Hair color"
},
{
"id": 3,
"description": "Nickname"
}
]
},
"properties": [
{
"id": 1,
"value": "819-583-4855",
"object_property_type_id": 1
},
{
"id": 2,
"value": "Mauves",
"object_property_type_id": 2
},
{
"id": 3,
"value": "Bob",
"object_property_type_id": 3
}
]
}
答案 0 :(得分:1)
从我看到的Angular中,属性的内容不是作为javascript执行的。它是custom parsed and executed mini-language,不支持复杂的索引。
据说,它可能是最好的。任何足够复杂的逻辑都应由控制器或服务处理。
function MyController($scope) {
$scope.set_current_data_value = function (current_data, property) {
var index = $scope.getIndexFromId(current_data.properties, property.object_property_type_id);
current_data.properties[index].value = $scope.property_name;
}
}
然后你的html看起来像:
<input type="text" placeholder="{{property.name}}" ng-model="property_name" ng-change="set_current_data_value(current_data, property)" class="form-control" disabled="disabled">
如果您不需要实时更新模型,也可以使用ng-submit
。