AngularJS では、モデルがダーティになり、サーバーに保存する必要があることをどのようにトリガーすればよいですか? ユーザーが「保存」ボタンをクリックする以外に?
$watch を使用することを考えましたが、データが最初にロードされたときに起動するため、至る所でこのハックが発生します。
AngularJS でモデルの変更を監視するときに初期ロードを無視するにはどうすればよいですか?
$emit イベントで保存をトリガーすることもできますが、次の場合:
- スコープにプロパティを設定する
- $そのスコープでイベントを発行する
- 親コントローラーで $on を使用してイベントをキャッチし、プロパティを確認します
この順序で、手順 3 で宣言されたイベント ハンドラーは、手順 1 で変更が行われる前のスコープ プロパティを認識します。
ここに例をまとめました:
http://plnkr.co/edit/Il9TzUdCSBdewCxIKARZ
ここで、foo、bar、foo、bar の順にクリックすると、イベント リスナーが常にプロパティの 1 ステップ後ろにあることがわかります。
これは、スコープ イベントがダイジェスト サイクルに関連して処理されるときに何か関係があると思いますが、javascript の法則に違反しているようです。Angular の連中はどのようにして、プロパティを変更してもプロパティが変更されないようにすることができたのでしょうか!?
これにより、常に古いデータを保存していたときに頭をかきむしりました。
簡単な修正は、 $timeout を使用して保存を「延期」することです。これは、ダイジェスト サイクルが終了するまでだと思います。これは機能しますが、面倒なようです。何が起きてる?スコープへの変更がイベント ハンドラーに表示されない場合、イベントは役に立たないように見えますね。
これを行うクリーンな方法はありますか?
ありがとう。