说我有
<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
的参数但是如果有办法分别访问每个范围而不改变其他迭代的编辑,我宁愿不要不必要地触摸模型。
答案 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项目的范围。