私は、ページ上のブロックセットを拡大して折り畳むための角度指示文を実装しています。このディレクティブは、パラメータとして「展開可能なアイテム」のセットを必要とし、そのすべてがプロパティisExpanded
を持つ必要があります。Angularjsで計算された配列
<expand-collapse-all expandable-items="expandableItems"></expand-collapse-all>
このような外観を拡張し、崩壊すべきブロック:問題は私のexpandableItems
は "計算された" でなければならないことである
_.forEach(groups, group => {
expandableItems.push(group.library);
});
:
<ul>
<li ng-repeat="group in groups">
<block items="group.items" library="group.library"></block>
</li>
</ul>
expandableItems
配列は、このように形成されています。配列、isExpanded
はライブラリのプロパティであり、グループではないので、グループを追加または削除することができ、私は手動で更新したくないからexpandableItems
は、グループが追加または削除されるたびに配列されます。
グループオブジェクトを展開可能にして(グループにオブジェクトを追加して)、グループ全体をブロックとディレクティブに渡してアイテムとライブラリを別々に渡すことで問題を解決できることがわかりました。しかし、私はまだそれが今のようなときにどのように解決できるのか、まだ不思議です。
私はknockoutjsでさらに理解しています。ノックアウトではexpandableItems
をko.computed
と定義することで簡単に達成できます。私はangularjsで私がどのように似たようなことをすることができるかはわかりません。どういうわけかexpand-collapse-all
に関数を渡すことができますか。expandableItems
配列を再計算しますか?
私はこれをやってみました:ページのコントローラのコンストラクタでgetExpandableItems(groups)
を定義し、
<expand-collapse-all expandable-items="getExpandableItems(groups)"></expand-collapse-all>
、私はエラー取得 "エラー:。!10 $ダイジェスト()の反復に達し中止を"
同様の質問がありました。http://stackoverflow.com/questions/18242816/bind-an-angularjs-directive-to-a-mapping-of-an-array – Nat