谁能向我解释为什么输入不可编辑/只读?如果是设计使然,背后的原理是什么?
从Angular 1.0.3 开始,这是设计使然。当您“直接绑定到每个 ng-repeat 项目”时,Artem 对 1.0.3+ 的工作方式有很好的解释– 即,
<div ng-repeat="num in myNumbers">
<input type="text" ng-model="num">
当您的页面最初呈现时,这是您的范围图片(我删除了一个数组元素,因此图片中的框会更少):
(点击放大)
虚线显示原型范围继承。
灰线显示子→父关系(即,什么$parent
引用)。
棕色线显示 $$nextSibling。
灰色框是原始值。蓝色框是数组。紫色是物体。
请注意,您在评论中引用的我的 SO 答案是在 1.0.3 发布之前编写的。在 1.0.3 之前,num
ngRepeat 子作用域中的值实际上会在您键入文本框时发生变化。(这些值在父范围中不可见。)从 1.0.3 开始,ngRepeat 现在在摘要循环期间用父/MainCtrl 范围数组中num
的(未更改的)值替换 ngRepeat 范围值。myNumbers
这实质上使输入不可编辑。
解决方法是在 MainCtrl 中使用对象数组:
$scope.myNumbers = [ {value: 10}, {value: 20} ];
然后绑定到value
ngRepeat中对象的属性:
<div ng-repeat="num in myNumbers">
<input type="text" ng-model="num.value">
<div>current scope: {{num.value}}</div>