【问题标题】:Dynamic index in ng-repeat valueng-repeat 值中的动态索引
【发布时间】:2013-08-12 17:55:17
【问题描述】:

我有一个简单的 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 给出了预期的输出

所以不知何故 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
    }
  ]
}

【问题讨论】:

  • 您是否为每个键设置了预先确定的索引?如果没有,您可以尝试改用$index
  • 是的,索引存储在数据库中。目前是 1、2、3 等,但并非总是如此
  • 你能给我们看看数据模型吗?
  • 我添加了 JSON 源

标签: javascript angularjs


【解决方案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

【讨论】:

  • 感谢您指出这一点,我认为它被解析为 Javascript,我想我错了!在控制器中处理更复杂的逻辑也更有意义,而且效果很好。谢谢!
猜你喜欢
  • 1970-01-01
  • 2014-06-11
  • 1970-01-01
  • 2014-09-29
  • 2013-01-26
  • 1970-01-01
  • 1970-01-01
  • 2013-02-24
  • 1970-01-01
相关资源
最近更新 更多