2

良い一日、

私はAngularを学んでいるので、どこを見ればいいのか教えていただければ幸いです。

私はばかげた問題に遭遇しました。$scope には、幅、高さ、配列の 3 つのデータがあります。幅または高さのいずれかが変更されたときに、幅*高さの長さの新しい (1 次元) 配列を作成しているそのスコープに $watch があります。これはうまくいきます。

ここで、3 つのパラメーターすべてを変更する必要があります。たとえば、幅と高さを設定し、空の配列を作成する代わりに、データで満たされた配列を使用します。そして、私が遭遇する問題は、データ配列が導入されていないように見えることです。

明確にするために追加しました。私が望むのは、作成された配列をデータ配列で上書きすることです。たとえば、保存したゲームをロードします。

私の理解では、新しい幅を設定すると、角度はすぐにデータの更新を開始し、新しい幅と古い高さで新しい配列を作成します。新しい高さが設定されると、ダーティとマークされ、次のダイジェスト サイクルを待ちます。また、データ配列を設定すると、ダーティな高さが処理されて新しい空の配列が作成されると上書きされます。

問題は、データ配列を挿入する前にすべての準備が完了していることを確認する方法はありますか?

PS。この例は単純化されており、さまざまな更新マーカーを設定するなどしてこの状況を処理できることを理解しています。「角度のある方法」に興味があります-処理が完了したというイベント通知または $ に似た機能がありますかすべての変更が処理されることを保証するのはどれですか?

ありがとう!

PPS。コード例 (簡略化):

$scope.w = 15;
$scope.h = 15;
$scope.somearray = [];

$scope.$watch('w*h', function() {
  $scope.somearray = [];
  for (var i=0; i<$scope.w * $scope.h; i++) {
    $scope.somearray.push(0);
  }
});

$scope.update = function() {
  $scope.w = 10; // here the previous watch is fired
  $scope.h = 10; // this value marked as dirty
  $scope.somearray = [1,1,1,1,1]; // this data array becomes overwritten when $watch is fired because of the dirty $scope.h
}
4

1 に答える 1

0

配列が上書きされる限り、配列を一度初期化してみませんか。

$scope.someArray = [];

次に、データをロードしている関数で:

var newData = aFunctionThatReturnsArray();
$scope.someArray = newData.slice(0);

配列が変更されたことを確認するには ($watch の 3 番目のパラメーターに注意してください):

$scope.$watch('someArray', function(newVal, oldVal) {
}, true;
于 2013-09-12T03:36:34.097 に答える