2017-09-25 16 views
1

ちょっと - 角度1.6のアプリで作業していますが、私は解決方法がわかりません。ここでは、セットアップの簡単な説明があります。このページは30の質問があるフォームです。クライアントからの条件ロジックは、Q1から「Yes」を選択してQ2-4を表示し、Q1が「No」ならQ5にスキップします。これは30の質問形式で繰り返されます。AngularJSで画面の表示を更新する

ユーザーがQ1で「はい」を選択してQ2-4と回答し、Q1が本当に「いいえ」であることがわかった場合、次のようなシナリオがあります。

私の質問は、1)モデルをクリアするにはどうすればいいですか? 2)ビューを更新するにはどうすればよいですか? Q2-Q4がチェックされていない/クリアされていて、ブランクであることを、3回目に判断した場合、Q1が実際にはいになるはずです。

function clearAll(arr){ 
     arr.forEach(function(element){ 
      if(element!==undefined){ 
       element = null; 
      }  
     }); 
    } 

これは、モデルをクリアしますが、ビューが更新されない次のよう

1については

は)私は、単純な」ClearAllをする方法を書きました。 Q2-4が空白/空白になるようにビューを更新するにはどうすればよいですか?

私が持っていたアイデアは、ビューを更新することですので、

$scope.$watch(myModel, function(val){ 
    //set to null or delete? 
} 

しかし、配列を受け入れるのに十分な柔軟性があるので、私はこれを一般化することはできません。アドバイスをいただければ幸いです。ありがとう。私は、UI-ルーターを使用して、質問に基づいて異なる状態を解決する、すなわちstate.questions、あなたのベースイントロページ(多分weclome質問や何かに)としてURL /questionsを持っている場合などの異なるパラメータを取ると、あなたの特定の問題については

+0

は、それが変化検出をトリガ、または '$ scope.apply呼び出します$のscope.''への機能の割り当て() ' – Akxe

+0

私は"コントローラとして "構文を使用しているので、私はスコープを避けることを好むでしょう。 $ scope。$ apply()を使用しても、ダイジェストサイクルに関連するエラーがスローされます。 – jrDeveloper

+0

また、クリアするのではなく、サーバー側または送信中に条件に基づいて保存するものを決定するため、この問題は発生しません。 – Akxe

答えて

1

、あなたは/questions/1を持っているでしょうし、第一の問題/questions/2 その後、いくつかの単純なサービス、すなわち上のオブジェクトのいずれかのリストを保つ...二などになり、次のようになります。アプリを通じて持続します

let questions = []; 

、後でいくつかで満たされてオブジェクト:

{ 
q1: { 
    answers: [1,2,3] 
}, 
{ 
q2: { 
    answers: [1,3] 
} 

完了した後にいつでも消去したり、新しい回答を押すことができます。また、状態をロードする前でも特定の回答を確認することができます。これにより、実際に必要な柔軟性が得られます。あなたは時計のグループとタイムアウトを追加した場合、あなたの時計は多分仕事ができる醜いソリューションのためのよく

$scope.$watchGroup(arrayOfModels, (newVal, oldVal)=>{ 
    if(newVal) { 
    // now do something you want with that models 
    // if they don't apply, try $timeout(()=> $scope.$apply()); 
    } 
}) 
+0

ありがとうございますが、既存の既存のコードを作成しているだけなので、既存の問題を修正する必要があります。 :/ – jrDeveloper

+0

これを正しく行うには遅すぎることはありません:)いくつかの回避策の問題を修正すると、深い穴が掘り下げられます。異なるヘルプが必要な場合は、コードの一部を投稿することができます。その手助けをすることができます。 – pegla

+0

コントローラには多くのコードがありません。ちょうどinit、save、clearAllですが、私はあなたのコメントに同意します。それは猿のパッチです。私は正しいアプローチ(私の時間の制約があるとすれば)は、簡単に議論した第2のアプローチをするかもしれないと思っています:$ scope(arrayOfModels、function(){//適切なモデルを削除});または類似のもの。 – jrDeveloper

関連する問題