我有以下内容:
<ul>
<li class="faders" ng-repeat="f in faderlist | faderFilter:from:to">
<br/><button ng-click="record(f)">Record new setting</button>
<input ng-model="myname" type="text">
</li>
</ul>
在记录功能中,我想: 1)访问myname 2)将myname重置为某个值。
对于1),我可以通过传递ng-click =“record(f,myname)
轻松获得它但对于2),我真的很生气。 ng-repeat确实创建了“内部范围”。我怎样才能访问这些?我试图将$ scope传递给记录,但它没有工作......
有什么想法吗?
答案 0 :(得分:4)
内部ng-repeat
范围会创建属性myname
。您不能通过引用外部作用域来传递此属性。但是您可以使用对象包装此属性并将其传递给它。在f
上定义此属性是有意义的,例如:
<ul>
<li class="faders" ng-repeat="f in faderlist | faderFilter:from:to">
<br/><button ng-click="record(f)">Record new setting</button>
<input ng-model="f.myname" type="text">
</li>
</ul>
$scope.record = function(f) {
f.myname = "newValue";
}
这允许您修改外部作用域中所有推子列表对象的myname
,内部作用域值将自动更新。如果您不想修改现有的f
对象,可以创建一个新对象:
<ul>
<li class="faders" ng-repeat="f in faderlist | faderFilter:from:to">
<br/><button ng-click="record(f, wrapper)">Record new setting</button>
<input ng-model="wrapper.myname" type="text">
</li>
</ul>
$scope.record = function(f, wrapper) {
wrapper.myname = "newValue";
}
答案 1 :(得分:0)
你不应该关心ng-repat内部范围,除了将$ parent附加到你的函数调用之类的内容
<ul>
<li class="faders" ng-repeat="f in faderlist">
<br/><button ng-click="$parent.record(f)">Record new setting</button>
<input ng-model="myname" type="text">
</li>
</ul>
这假设您的控制器范围有一个名为record的函数,不会使用您的集合的元素f调用。你唯一关心ng-repeact内部范围的是与索引相关的变量。应该处理其余部分购买item元素和父范围。