リストを表示するng-repeatがあり、クリックするとクリックしたアイテムdivs
の追加div
が表示されます。
これは機能しています
<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でデフォルトの属性showfull
が設定されています。false
これは機能していますが、アイテムがクリックされたときにリスト内の他のすべてのアイテムを非表示にしたいと考えています。私はこのようなものを試しました:
これは機能していません
<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 は表示されません。2 つの質問があります。
これは
item
、関数で「コピーによって渡された」expand
か、何らかのスコープ分離の問題が原因だと思いますが、その理由を詳しく説明してもらえますか? 解決したアイテムをクリックしてこのアイテムの追加コンテンツを表示するときに、他のアイテムのすべての追加 div を非表示にするにはどうすればよいですか? ディレクティブを実行する必要がありますか? 解決しない
ありがとう