「プレイリスト」のような種類のアプリを構築しています。これはng-repeatedカスタムディレクティブで表されます。ng-repeat = "element in playlist"
ng-repeatで重複要素を処理する
プレイリストで同じ要素を2回再利用できるようにしたいので、私はtrack by $index
を追加しようとしました。
今は、どのような混乱のは次のとおりです。奇妙が起こっ
$scope.removeElement = function(index){
$scope.playlist.splice(index, 1);
}
何か:私はプレイリストから要素を削除するために来たときに(私は基本的にこのようなものが含まれている機能removeElement(index)
を持っている要素はから正しく削除されました$scope.playlist
、何らかの理由でビューが正しく更新されませんでした。最後の要素が削除されるように見えた。
さらに、私は適切にどちらかの配列の要素を順に再ことができませんでした。
track by $index
を削除したときにこの問題が解消されたので、配列から項目を削除すると、インデックスだけを見ていると最後のものが削除されたように見えます。
トランスクルードコンテンツが正しく削除されているため、動作が、しかし奇妙である - see this plunker
EDIT:上記のリンクは、より良い問題を示し、また、私は落ち着い答えを表示するように変更されました。
私は何を得ていたのかを明確にするため、質問もわずかに編集されています。下記のKayakDaveの答えは正しいですが、プリミティブの配列(私の元のプランカーが特集していたもの)の方が適しています。
TL; DR:はどのように自分の位置を制御する、または正しく構成要素を除去する能力を犠牲にすることなくng-repeat
で重複要素を入れていますか?
これを示す最新のプランナーを投稿できますか?これは、同じ問題が発生するように思えます。なぜなら、問題はコレクション/オブジェクトキーだとは思われませんが、私はまだ不一致が予想される '$ index'との相関関係です。だから、私は何が欠けているのか分からない。そして、あなたが投稿したのと同じ問題を抱えている人たちが、あなたのソリューションをよりよく理解できるように助けてくれるでしょう。 – KayakDave
あなたは正しいです。私がここで言わないことは、 'track by $ index'を使う代わりにこれが使えるということです。 '$ by track by $ index'はプリミティブに必要ですが、私のポストのプレイリストの例では、インデックスで追跡するよりも2回インクルードしたいトラックをコピーするほうが理にかなっています。 –
それは今意味があります。更新していただきありがとうございます。あなたの質問をあまりにも微妙に微調整するかもしれない瞬間があったら、 "$ indexでトラックを使用している場合、どのようにng-repeat配列から要素を正しく削除するのですか?"という質問を要約します。あなたはもっと広い質問に今答えていると思います。ちょうどこれがすべて将来の世代に役立ちます:) – KayakDave