【问题标题】:AngularJS : How to access scopes created by ng-repeat?AngularJS:如何访问由 ng-repeat 创建的范围?
【发布时间】:2014-05-20 03:15:58
【问题描述】:

我有以下几点:

<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)访问我的名字 2) 将 myname 重置为某个值。

对于 1),我可以通过传递 ng-click="record(f,myname) 轻松获得它

但是对于 2),我真的很生气。 ng-repeat 确实创建了“内部范围”。我怎样才能访问那些?我尝试将 $scope 传递给记录,但它不起作用...

有什么想法吗?

【问题讨论】:

  • 嗯,有由 ng-repeat 创建的范围。似乎这些范围是具有 ng-model、myname 的范围。我怎样才能访问它??

标签: angularjs scopes


【解决方案1】:

内部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";
}

【讨论】:

    【解决方案2】:

    你不应该关心 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 内部范围的是与索引相关的变量。其余的应该处理购买项目元素和父范围。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-25
      • 1970-01-01
      • 2012-06-25
      • 1970-01-01
      • 2016-11-28
      • 2013-01-17
      • 2013-12-07
      相关资源
      最近更新 更多