Javascript 在ng repeat内修改角度范围内的对象
我正在用HTML创建一个表单,使用ng repeat从作用域中的一个对象生成表单元素。我还使用该对象生成ng repeat之外的其他元素 HTML中的简化示例如下所示:Javascript 在ng repeat内修改角度范围内的对象,javascript,angularjs,angularjs-ng-repeat,Javascript,Angularjs,Angularjs Ng Repeat,我正在用HTML创建一个表单,使用ng repeat从作用域中的一个对象生成表单元素。我还使用该对象生成ng repeat之外的其他元素 HTML中的简化示例如下所示: <div ng-app="App"> <div ng-controller="Ctrl"> <div class="block1"> <form ng-repeat="(key, value) in test"> &l
<div ng-app="App">
<div ng-controller="Ctrl">
<div class="block1">
<form ng-repeat="(key, value) in test">
<label>{{key}}</label>
<input ng-model="value" />
<p>{{value}}</p>
</form>
</div>
<div class="block2">
<p>
{{test.a}}
</p>
<p>
{{test.b}}
</p>
</div>
</div>
</div>
在此示例中,区块2中的文本设置为test.a
和test.b
的初始值。循环内的输入值和
值也设置为初始值
当我修改输入中的值时,ng repeat块中的
值正确更新,但块2中的
标记无法更新
为什么会有这种行为?ng repeat是否创建自己的隔离作用域?如果是的话,我怎样才能更新控制器级别的作用域?还有,有人能解释一下这种行为背后的想法和它提供的任何好处吗
试试这个:
angular.module('App', []);
function Ctrl($scope) {
$scope.test = [
{label:"a", value:"abc"},
{label:"b", value:"def"}
]
}
及
{{o.label}}
{{o.value}}
{{test[0]。value}}
{{测试[1]。值}
Angularjs使用对象是通过引用传递的事实。因此,如果将对象传递给函数并更改函数内部的对象,则函数外部的对象也会更改。
查看此更新的
ng repeat
为每个重复项创建一个子范围。因此,您试图将原语传递给子作用域,而子作用域不会创建对父作用域的引用。但是,当传递对象时,传递的是原始对象引用
来自Angular一位父亲的口中:
在ng模型中始终有一个点
由Angular creator提供(2012/12/11)。请转至第31分钟,了解有关此确切情况的详细说明
将数据修改为对象数组:
$scope.test = [{ val:"abc",key:'a'}, {val:"def",key:'b'} ]
然后在中继器中:
<form ng-repeat="item in test">
<label>{{item.key}}</label>
<input ng-model="item.val" />
<p>{{item.val}}</p>
</form>
{{item.key}
{{item.val}}
感谢您对该行为的清晰解释。我的用例要求我在外部作用域中按名称引用“test”的属性,因此数组对我不起作用,但子对象似乎可以正常工作。我的对象键是UNIX时代的,所以这对我来说非常困难me@neaumusic评论不清楚,如果需要帮助,请发布问题
$scope.test = [{ val:"abc",key:'a'}, {val:"def",key:'b'} ]
<form ng-repeat="item in test">
<label>{{item.key}}</label>
<input ng-model="item.val" />
<p>{{item.val}}</p>
</form>