输入字段在嵌套的AngularJS重复中失去焦点

时间:2016-01-18 10:57:10

标签: javascript html angularjs

我对嵌套的角度列表有一些奇怪的行为。在输入第一个字母后,焦点立即丢失。

外部重复是属性列表,由属性名称(不是索引)标识。内部重复是属性的子数组,由索引标识。

显示和绑定按预期工作,但是当我改变某些内容时,例如插入一个字母,焦点丢失,我不能输入另一个字母或任何东西。我必须再次点击该字段。

<div data-ng-repeat="(key, value) in configuration.metaData">

    <label>{{key}}</label>

    <input data-ng-repeat="subKey in configuration[key]"
           data-ng-model="configuration[key][$index]"
           type="text"
           name="{{subKey}}">
</div>

可能有用的一些其他信息:

  • 此代码段通过ng-include
  • 包含在表单中
  • 我与textarea
  • 的行为相同
  • metaData包含有关对象属性的数据(也是数据类型等),但实际值在配置本身中

2 个答案:

答案 0 :(得分:1)

for line in filehandle:

这很奇怪,可能是错的。即通过键入smth,您可以更改配置[key] [0],从而更改第一个subKey ...

我猜你的意思是这样的:

<input data-ng-repeat="subKey in configuration[key]"
       data-ng-model="configuration[key][$index]"

带模型

<input data-ng-repeat="subKey in configuration[key]"
       data-ng-model="subKey.value"
       type="text"
       name="{{subKey.name}}">

http://plnkr.co/edit/IwDS3141BWcv9t5BcAka?p=preview

答案 1 :(得分:1)

在所有ng-repeats中使用'track by $ index'可以避免这个问题。

原因是如果内容发生变化,angularjs仍然会知道 它是同一个对象,因为angular通过它们在数组中的位置跟踪项目(键,值)。

当(键,值)改变,没有跟踪$ index时,随着“值”的改变,它被认为是一个新的对象,它引入了松散的焦点(元素被破坏然后由angularjs重新创建)。 p>