ng-repeat值的动态索引

时间:2013-08-12 17:55:17

标签: javascript angularjs

我有一个简单的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">

问题是输入保持为空。我已经测试了一些组合并发现它可以工作:

  1. getIndexFromId(current_data.properties, property.object_property_type_id) == 0
  2. current_data.properties[0].value给出预期输出
  3. 所以某种方式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
        }
      ]
    }
    

1 个答案:

答案 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