我有一个ng-repeat显示divs
的列表,当我点击一个时,它显示一个点击项目的自动div
。ng-repeat:显示一个点击并隐藏其他项目
这是工作
<div ng-repeat="item in items">
<div ng-click="showfull = !showfull">
<div>
<h1>{{item.title}}</h1>
<p>{{item.content}}</p>
</div>
</div>
<div ng-show="showfull">
<p>{{item.info}}</p>
</div>
<hr/>
</div>
我的项目是从包含项目列表的JSON加载,每个项目都在此JSON默认attribut showfull
设置为false
。这是行得通的,但现在我想在单击项目时隐藏列表中的所有其他项目。我tryied是这样的:
这不是工作
<div ng-repeat="item in items">
<div ng-click="expand(item)">
<div>
<h1>{{item.title}}</h1>
<p>{{item.content}}</p>
</div>
</div>
<div ng-show="showfull">
<p>{{item.info}}</p>
</div>
<hr/>
</div>
,并在控制器中我添加了一个功能:
$scope.expand = function(e) {
e.showfull = !e.showfull;
//TODO: put here a foreach logic to hide all other items
}
但是,即使没有在foreach这个逻辑没有工作,该项目单击时不显示额外div。我有两个问题:
我想这是因为
item
被在expand
功能或者某种范围的隔离问题,“通过复制传递”,但你能解释我为什么在细节? 解决如何隐藏其他所有项目的额外的div当我点击一个项目,显示该项目的其它附加内容?我需要做一个指令吗? 没有解决
感谢
感谢,似乎工作,如果我没有在角度的角度参考项目会发生什么? Angular不会将项目链接到ng-show动作? – deKajoo 2014-10-16 15:58:24
@deKajoo如果你没有引用这个项目,你将会违背'$ scope.showfull' – Vadim 2014-10-16 15:59:33
第二个问题:为了隐藏所有其他项目,我应该在控制器函数中使用'angular.forEach'还是有更好的方法? (编辑:感谢您的第一个答案) – deKajoo 2014-10-16 15:59:54