調査した後、私はまだ私の苦境に執着しています。私は角度のある「埋め込み済み」のアプリケーションのための最新版の基盤を使用しています。
私は、データの追加と編集の両方に使用されるフォームを持っています。これは、ジョブのためにそのジョブを言い、ジョブの従業員の日数を追跡します。ビューのロード時には、フォームは完全に空であり、ジョブの詳細と従業員の詳細という2つのセクションがあります。
最初に、ユーザは、従業員セクションがアクティブ化されるように(従業員がそれにリンクできるようにジョブのIDを作成するために)詳細を入力して保存する必要があります。これは正常に動作し、> 0に設定されているジョブIDによって有効になります(-1はデフォルトで負荷時)。
これまでのところうまくいきましたが、コントローラには既存のジョブレコードを読み込む機能があります。ユーザーが3つのフィールドのいずれかをぼかすと、コントローラーは、これらの固有のフィールドに一致するジョブのデータ・オブジェクトを検査し、スコープ「ジョブ」モデル内のデータにロード(angular.copy)します。これがロードされると、すべてのフォーム入力が設定され、ダーティーとしてマークされます。
明らかに私の必要な動作は、ジョブの詳細がシステムによって読み込まれた場合、そのジョブの詳細が後で編集されたかどうかを知ることができるように、フォームがダーティとマークされていないことです。保存され、IDを与えられた新しいジョブにも同じことが必要です。
私はsetPristine()関数が実際にform[0].reset()
に似たフォームとモデルをリセットすることを理解していますが、間違っている可能性があります。私はまた、手の届かないところが行く方法かもしれないと思う?
また、従業員セクションの従業員入力の追加など、このビューのすべてのセクションが含まれていることを言及する必要があります。
私は単純にng-dirtyクラスを手動で削除することができますが、これを読んだ後、角度の更新は行われず、それ以上の編集は識別されません。
要素のすべての子入力からng-dirtyを機能的に削除する方法はありますか?また、フォーム内のすべてではなく、読み込まれたデータも削除しないでください。
注:デフォルトではすべての入力は関連するモデルにリンクされ(ng-model
を介して)、データはコントローラーにモデルにロードされます。
私は '$ setUntouched()'を調べましたが、これは値が変更されたのか、単にフォーカスの後にぼやけたのかを変更することに気がつきました –