0

おはようございます!私はまだAngularJSにかなり慣れていないので、完全に理解できる答えが見つかりませんでした.

次のような構造のフォームがあります。

  • 名前
  • Eメール
  • カラー[オプションレッド、オプションブルー]
    • [色] でオプション ブルーを選択した場合にのみ表示される必須フィールド

Option Blueを選択すると、2 番目のフィールド セットが表示されます。ただし、 「オプション ブルー」の選択を解除すると、必須フィールドは再び非表示になりますが、別のフィールド (「名前」など) をクリックして別の値を入力するまで、フォームはフィールドが空であることを「認識」します。

条件は、イベント リスナー (?) が発生するたびにブール値の$form.$validをチェックします。これは onItemSelect と onItemDeselect と onSelectionChange です。

私がAngularについて理解していることから、私は...クリックて別のフィールドに入力するまで、別のダイジェスト(?)サイクルが開始されていないと思いますか? 疑問符がいっぱいで申し訳ありません。私の知識は少し不安定で、理由によりソース コードを完全に貼り付けることができません。

私の理解は正しいですか?もしそうなら、この問題を解決するための推奨される方法はありますか?

編集:ダミーの変数名とオブジェクト名を含むいくつかのサンプル コードを以下に追加し、コードのより大きなセクションを要約するためにいくつかの擬似コードを追加しました。

<script>
   var app = angular.module('myApp',[some stuff]);
   app.controller('myContropper', function ($scope, $rootScope, $timeout) {
         [some variables for scope]
         $scope.color = {};
         $scope.optionB = {
               hue: null;
               saturation: null;
         };
         [some other variables that only have values of OptionB is chosen and subsequent fields are populated]

         $scope.colorChange = function() {
              if color is changed, clear all associated arrays and values by setting it to either '[];' or 'null;'
         };

         $scope.checkForm = function() {
              if OptionB is not chosen, clear all options related to OptionB

              use $scope.form.$valid boolean value and do something with it
         };

         function onItemSelect(item) {
              if OptionB is selected, set the flag for that option to true
              $scope.checkForm();
         }
         function onItemDeselect(item) {
              if OptionB is not selected, set the flag for that option to false
              $scope.checkForm();
         }
   }
</script>

いくつかのデバッグ アラートを設定しました。OptionBlue の選択を解除すると、アラートに次の行が表示されることに気付きました: requiredFieldifOptionBisChosen: object Object

ただし、別のフィールドをクリックして値を入力すると、フォームは有効性を更新 (?) し、「requiredFieldifOptionBisChosen: null」と表示されます。

4

0 に答える 0