我有一個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