2017-02-02 9 views
0

angular-input-modifiedモジュールを使用して、ユーザーがフォームを変更したかどうかを追跡しようとしました。グローバルに動作を無効にし、必要なフォームフィールドにのみ変更可能な動作を追加することで、包含ポリシーを使用する。 私の問題は、コレクション内の変更を追跡することです。より具体的には、私はアイテムのコレクションを持っており、ユーザがアイテムを選択すると対応するプロパティが表示されます。ユーザーがプロパティを変更すると、保存ボタンが有効になります。 は、これまでのところ、私はこれを試してみました:コレクションアイテムのユーザ選択に基づいて、今ng-switchとangle-input-modifiedの動作

  COLLECTIONS 
      <select ng-model="wiDevCtrl.currentCollection" 
        ignore-dirty 
        ng-options="opt as opt.Name for opt in wiDevCtrl.device.Collections"></select> 

とはangular-に「修正」フラグを変更するには、対応するコンテンツ

<div class="form-group subSection" bs-modifiable="true">    
    <input type="checkbox"       
      ng-model="wiDevCtrl.currentCollection.IsTriggerImmediately" /> </div> 

しかし、このアプローチの原因とチェックボックスが表示されます明らかにコレクションが変更されたときに、チェックボックスで$ pristine値のように保存されたものとは異なる値(バインディングを介して)が変更されるため、入力変更されたモジュールを 'true'に設定します。

私は、コレクションごとに「peronal」チェックボックスを作成すると、問題を解決できます。そのために私はスイッチを使用しようとしました:

<div class="form-group subSection">    
      <div ng-switch on="wiDevCtrl.currentCollection.Name" bs-modifiable="true"> 
       <div ng-switch-when="ng-switch-default"></div> 
       <div ng-switch-when="1"> 
        <input type="checkbox"        
          ng-model="wiDevCtrl.currentCollection.IsTriggerImmediately" /> 
       </div> 
       <div ng-switch-when="2"> 
        <input type="checkbox"        
          ng-model="wiDevCtrl.currentCollection.IsTriggerImmediately" /> 
       </div> 
       <div ng-switch-when="3"> 
        <input type="checkbox"        
          ng-model="wiDevCtrl.currentCollection.IsTriggerImmediately" /> 
       </div>     
      </div> 
     </div> 

その後、私はほとんど1つの事を除いて正しい動作を得ました。チェックボックスを変更すると、正しく「変更済み」に設定されます。しかし、私が別のコレクションに切り替えて、 'masterValu'を返すと、このチェックボックスは$ pristineを呼び出すのとは逆に変更されましたが、私はそうしません。私は以前のコレクションに戻り、チェックボックスを元の「変更済み」状態に戻すと「偽」となることを期待しています。それは明らかに起こっていません。何か案は?ありがとう。

あなたは、ナビゲーションセレクタをMaracuyaをクリックしhere

  1. Plunker例を見つけることができます。チェックボックスをオンにします。 MaracuyaのようなMaster: "false"とModified:はい。
  2. 他の果物を選択します。
  3. Maracuyaに戻ってください。 Maracuya様のMasterが "真"になり、Modifiedになっていることを確認してください。いいえ、Formは変更された状態であり、変更されていない状態に戻る方法はありません。

答えて

0

このライブラリの著者に連絡しました。明らかにライブラリは、固定要素に対してのみ機能します。 ng-Switchとng-IfはDOM要素を再構築するため、すべてがデフォルトにリセットされます。それを修正する唯一の方法はこのようにそれに応じて表示/非固定要素とショーにダイナミックから変更することです:

<input name = "myFruits" ng-repeat="x in user.favoriteFruit" ng-show="user.favoriteFruit.id == $index" type="checkbox" ng-model="fruits[$index].like" bs-modifiable="true"> 

あなたはhere

をplunk見つけることができます
関連する問題