AngularJS:如何访问ng-repeat创建的范围?

时间:2014-05-19 19:02:47

标签: angularjs scopes

我有以下内容:

<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传递给记录,但它没有工作......

有什么想法吗?

2 个答案:

答案 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元素和父范围。