0

ng-switch を使用して複数の子の中から選択する新しいディレクティブを作成しようとしています。この例は、ディレクティブ内に ng-switch を作成するだけのものですが、最終的にディレクティブにはより多くのディスプレイ シュガーといくつかの自動関数が含まれるため、ディレクティブを作成することが正しい解決策であると思われました。

これまでの私の進捗状況は次のプランカーにあります: http://plnkr.co/edit/yeCiIOCQswYJHyTozQUZ

私が行っている $compile はスイッチを評価しているようで、値が true であってはならない when 句のいずれにも一致しないと判断しています。レンダリングされたピッカーの要素を調べると、それを確認できます。

また、この段階で $compile を呼び出すと、項目リストが破棄されたように見えるので、間違ったツリーを鳴らしているように見えることも懸念されます。

トランスクルージョンされたコンテンツを現在の状態で再評価するにはどうすればよいですか?

アップデート

間違った木を吠えていたと思います。マシューの答えは私を正しい方向に導き始めたので、それは大きな助けになりました.

私が知る限り、ディレクティブ内にディレクティブ (ng-switch) を構築しようとするのは悪い考えです。以前の plunker では、コンパイルが行われたときにテンプレートが完全に変更されていました。つまり、 which パラメータを変更しても更新されません。そもそもそれが私にとって変なにおいがしていたものです。

ここに改訂されたプランカーがあります: http://plnkr.co/edit/WUVgdXjwedxO4356321s

この場合、トランスクルージョンを再起動する「どの」値に注意が必要です。その関数は、以前のエントリ (存在する場合) を削除し、新しいエントリを追加します。いくつかの追加の利点があります。

まず、「item」ディレクティブを削除しました。クラスを見ているだけなので、存在する理由はありません。次に、$animator を使用してリスト操作を行いました。つまり、ピッカーに ng-animate を追加して、アニメーション効果を得ることができます。

この質問を見ている他の誰かに役立つことを願っています。

4

1 に答える 1

0

コードには 2 つの問題がありました。

1)あなたのテンプレートは評価されていたので、あなたが望む変数の代わりにあなたの on は数字の1になりました。

template: '<div><div ng-switch on="which"></div></div>',

2) コンパイルを使用した場合、次のように $scope を渡す必要がありました。

$compile(sel)($scope);

更新された plnkr は次のとおりです: http://plnkr.co/edit/Q6ViJBvkLwQRgUKYMfS9?p=preview

于 2013-06-17T01:31:03.023 に答える