これが起こっている場所でコーディングしているアプリの単純化されたシナリオを使用して、Plunkerを準備しました。
シナリオの簡単な説明:
- $scope にトランザクションのリスト (トランザクション タイプのオブジェクト) をロードするコントローラーがあります。
- このコントローラーは、新規または更新されたトランザクション オブジェクトの永続化を担当するサービスによって生成されたイベントをリッスンし、モデルをリロードします。
- ビューは ng-repeat でトランザクション リストをレンダリングします
- すべてのトランザクションを個別に更新 (コミットまたはロールバック) できます
- AngularJS アプリには、2 秒ごとに新しいトランザクション オブジェクトを作成する run() ブロックがあり、これらのトランザクションが外部ソース (サーバーに対する $http 要求など) からのものであることをシミュレートします。
サービスが生成するイベントを受け取った後、モデルがオブジェクトの新しいリストで再割り当てされるときに、ビューのリロードが行われないことがわかります。
私はこれで過去48時間髪を引っ張っています. この種の動作の最も一般的な原因は、AngularJS の外部でモデルを変更し、$apply() を呼び出さないことですが (私はそう思います)、そうではありません。
また、$scope.$$phase と $apply または $digest の呼び出しを手動でチェックしようとしましたが (これが潜在的に悪いと考えられる場合でも)、まったく成功しませんでした。
私は何か間違ったことをしていますか?これはバグですか?他に適用できる戦略はありますか?