私はこの問題を何時間も見てきましたが、まったく同じように見える他の多くの質問を読んだことがあります。アレイの変更でNg-repeatが更新されない
私はオブジェクトの配列(instructionObj.instructions
)を持っていて、それらのオブジェクトはng-repeat
で繰り返され、それらのテンプレートは指令です。
<div instruction-directive ng-repeat="i in instructionsObj.instructions"> </div>
次に、Jquery UIをソート可能にしてアイテムを並べ替えることができます。
var first, second;
$(".sort").sortable({
axis: "y",
start: function(event, ui) {
first = ui.item.index();
},
stop: function(event, ui) {
second = ui.item.index();
console.log(first + " " + second);
rearrange(first, second);
$scope.$apply();
}
});
私は、オブジェクトの開始と終了インデックスは移動してアクセスし、それに応じて配列を並べ替える:このすべては、ほとんどの時間を素晴らしい作品
function rearrange(f, s){
$timeout(function() {
$scope.instructionsObj.instructions.splice(s, 0,
$scope.instructionsObj.instructions.splice(f, 1)[0]);
$scope.$apply();
});
}
。私が失敗したシナリオは、オブジェクトを並べ替えるときです(1つの列が画面に表示されるすべてのオブジェクトの現在の位置です):
a | b | c | d | a
b | c | d | c | b
c | d | b | b | d
d | | | | c
最後のステップはa、d、c、bでなければなりません。しかしそれはa、b、d、cに変わります。
しかし、私は戻って私の前のビューに戻り、正しい設定が表示されて戻ってきたときに、すべてが順調です。あなたが見る通り、私は$timeout
と$apply()
と他の多くのものを試しましたが、どれもうまくいかないようです。
私は配列をログに記録することができ、DOMが表示しているものと違っている(正しい)ことを確認できます。どんな助けもありがとう。
アップデート:私も、配列の正確なレイアウトを表示するために<pre ng-bind="instructionsObj.instructions|json</pre>
を使用していますが、それは常に正しい
。私の心は吹かれた。
plunkrやfiddleやStackoverflowスニペットを提供できますか? –
難しいと思われるコードが多すぎます。そのため、私は本当にこれに影響を与えるものを提供しました。私は、誰もがアプリをダウンロードしてテストできるように、Ionic Viewのリンクを提供しました。 – theblindprophet
あなたはplunkrにすべてのコードを入れる必要はありません。ちょうど[mcve] – ochi