访问控制器功能中的ng-repeat范围

时间:2014-07-01 09:28:25

标签: javascript angularjs angularjs-ng-repeat ng-repeat

说我有

<div ng-repeat="i in items">
  <span ng-show="editing">i.something</span>
  <span ng-show="!editing">i.something</span>
  <a ng-click="dosomething(i)">click</a>
</div>
我在控制器中的

$scope.dosomething = function (model){
   //do stuff
   editing = false;
}

如何只访问ng-repeat的迭代变量,我尝试将编辑作为参数传递给dosomething我试过通过$ scope.editing访问它,我已经一直在浏览$ rootScope文档。无法解决。

我承认我可以添加editing作为i的参数但是如果有办法分别访问每个范围而不改变其他迭代的编辑,我宁愿不要不必要地触摸模型。

3 个答案:

答案 0 :(得分:1)

您的dosomething()函数在父作用域的上下文中运行(因此会影响所有项目) 因此,您应该从$scope.editing = false的正文中删除dosomething()

然后,在ngClick表达式中,您可以插入editing=false,该ngRepeat将在<div ng-repeat="i in items"> ... <a ng-click="editing=false;dosomething(i)">click</a> </div> $scope.dosomething = function (model){ // Do stuff // Don't touch `editing` here } 为每个项目创建的子范围的上下文中进行评估,并且 not 影响其他项目。

E.g:

{{1}}

另请参阅此 short demo

答案 1 :(得分:0)

ng-repeat指令创建子范围并将它们绑定到每个&#34;重复&#34;元件。因此,您可以访问&#34;编辑&#34;这种方式在子范围内变量。

$scope.dosomething = function (model){
   //do stuff
 angular.element(model.currentTarget).scope().editing = flase;
}

答案 2 :(得分:0)

如果我理解正确:

<div ng-repeat="i in items">
  <span ng-show="i.editing">i.something</span>
  <span ng-show="!i.editing">i.something</span>
  <a ng-click="dosomething(i)">click</a>
</div>

在控制器中:

$scope.dosomething = function (model){
   //do stuff
   model.editing = false;
}

模型是指ng-repeat项目的范围。