2014-07-01 116 views
1

说我有访问NG重复范围

<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-重复迭代的变量,我试过通过作为参数传递编辑dosomething我试图通过$ scope.editing来访问它,我一直在寻找通过$ rootScope文档。无法解决。

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

+0

你的物品包含哪些类型的数据? 你想在哪种情况下显示你的数据? 您的/ /在这里做东西的一部分必须包含条件,您可以将编辑设置为true或false。但我对你的问题感到困惑,所以不能为你提供解决方案。要更清楚要实现什么...... – micronyks

回答

1

您的dosomething()函数在父范围的上下文中运行(从而影响所有项目)。
所以,你应该从dosomething()删除$scope.editing = false

然后,你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 
} 

还参见本short demo

+0

对不起,已经有一周了,这对于其他场景来说是一个可行的解决方案,但是那个时候我想我正试图根据被调用函数内的条件来改变编辑。 – Kiee

+1

@Kiee:你可以返回一个值并根据它设置编辑:'ng-click =“editing = dosomething(i)”' – gkalpak

0

ng-repeat指令创建子作用域并将它们绑定到每个“repeat”元素。因此,您可以通过这种方式访问​​子范围中的“编辑”变量。

$scope.dosomething = function (model){ 
    //do stuff 
angular.element(model.currentTarget).scope().editing = flase; 
} 
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> 

和Controller:

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

凡模型指的是NG重复项目的范围(i)。