3

我有一个 html 页面,其中我有一个对象“消息”,该对象具有一个属性“属性”,它是一个对象数组。问题是当我使用'ng-repeat'迭代'Message.Properties'项目以呈现我用angularjs创建的某些自定义元素时,它会生成一个id,我为相同的元素得到相同的id类型。这是我的代码示例:

<div data-ng-repeat="property in Message.Properties">
...
  <div ngm-if="(property.Type == 9)">                            
    <sdk:selectbox name="property.Title" row="" datafield="property.Value"
      options="property.ValueCollection" displayfield="Value" valuefield="Key"
      mandatory="property.isMandatory" labeled="property.Title" multiple="">
    </neolynk:selectbox>
  </div>
</div>

重新表述,当元素“sdk:selectbox”被编译时,如果我在 Message.Properties 中有 2 个具有相同类型的属性(例如:9),则生成的 id(创建的 html 输入)对于两者都是相同的(虽然我是随机生成的),但是对于不同的输入,我当然需要不同的 ID。我读到 ng-repeat 会为每个项目复制模板,是吗?!如何解决?我将不胜感激任何帮助。

4

2 回答 2

7

您可能可以$index在您的内部使用ng-repeat基于当前行创建唯一 id。取自文档

每个模板实例的本地范围都公开了特殊属性,包括:

  • $index - {number} - 重复元素的迭代器偏移量(0..length-1)
  • $first - {boolean} - 如果重复元素在迭代器中是第一个,则为 true。
  • $middle – {boolean} – 如果重复元素在迭代器的第一个和最后一个之间,则为 true。
  • $last - {boolean} - 如果重复元素是迭代器中的最后一个,则为 true。
于 2013-03-14T18:30:13.747 回答
0

听起来从您Message.Properties到 id 的转换是问题所在。您是否尝试通过将 Properties 显式设置为不同的对象集(甚至将 设置Message.Type为不同于 9 的对象)并运行它来检查这一点?

ng-repeat 不会为每个项目克隆模板,但会$scope从其父项继承模板,因此可能会在多个项目中使用来自那里的某些对象。

于 2013-06-07T05:57:56.813 回答