0

テスト アプリケーション バックエンドのコードをリファクタリングした後に問題が発生しました。テストには質問と回答があり、各質問には複数の回答があり、そのうちの 1 つだけが正解です。

いくつかのデバッグの後、すべてが正常に機能しているように見えますが、ロジックを管理するすべての質問と回答は 1 つのコントローラーに配置されていました。ネストされたコントローラーを分離するように回答ロジックを移動した後、この問題に固執しました。さまざまな方法を試しましたが、どれも役に立ちませんでした。

目標は、Angular UI ツリー (例 #4 - グループとカテゴリ) を Angular UI Bootstrap Modal と結合することです。

設計上、質問と回答の追加と編集はモーダル ウィンドウで行われます。テンプレートは個別に配置されているため、質問と回答ごとに繰り返されることはありません。提供されたデータが有効でない場合、検証エラーが表示されます。それ以外の場合は、成功アラートが表示され、すべてのフィールドがクリアされ、デフォルトの状態に戻ります (モーダル ウィンドウ内で発生するすべてのことは、開いたままになり、[キャンセル] を押すことによってのみ閉じることができます。 X ボタンまたはキーボードの Esc ボタン)。

モーダル ウィンドウから更新する必要がありQuestionsCtrl $scope.questionsます (トリガー ボタンはモーダル ウィンドウのテンプレート内にあります)。「追加」ボタン$scope.questionsを押すとスコープが更新され、ui.tree もバックグラウンドで更新されます。成功アラートまたは検証エラーは表示されず、フォーム フィールドはクリアされません。繰り返しクリックしても、実際の関数が再度呼び出されることはありません (したがって、1 回だけ実行されます)。

モーダルウィンドウはありませんが、ネストされたコントローラーを追加すると正常に機能します。

plunkを作成し、冗長なコードをすべて削除したので、問題に集中しやすくなりました。必要に応じて、さらにコードを提供できます。たとえば、plunk の結果はconsole.log1 回だけ表示されます。

4

1 に答える 1

0

機能していないわけではありません。しかし、あなたは間違ったデータを設定しています。あなたが書くとき:

$scope.add = function() {
    console.log('!!!');
    var data = [{"dataType":"question","id":2,"name":"1. Question 1","answers":[{"dataType":"answer","id":7,"name":"1. Answer 1","correct":false},{"dataType":"answer","id":8,"name":"2. Answer 2","correct":false},{"dataType":"answer","id":9,"name":"3. Answer 3","correct":false}]}];;
    $scope.setQuestions(data);
  };

と:

 $scope.setQuestions = function(data) {
    $scope.questions = data;
  };

新しいアイテムを追加するのではなく、質問のコレクションをデータにすることを強制しています。つまり、質問配列を最初からやり直すようなものです。これを機能させるには、次の種類の setQuestions関数を使用する必要があります。

$scope.setQuestions = function(data) {
    $scope.questions.push(data);
  };

そうすれば、新しい質問が既存の質問に追加されます。

それが役に立てば幸い。

于 2014-07-14T12:55:10.263 に答える