Angular 以外の典型的なアプリは、次のように動作します。
- ユーザーが選択する
- ユーザーが「次のページ」ボタンを押す
- ユーザーの選択は、同期リクエストを介してサーバーに送信されます
- サーバーは選択肢をDBに保存し、ユーザーに次に表示する選択肢を決定するロジックを実行し、正しい選択肢を含むページを提供します
Angular を使用すると、フローは次のようになります。
- ユーザーが選択する
- ユーザーが「次のページ」ボタンを押す
- アプリは、ユーザーが行った選択を確認し、ユーザーに次に表示する選択を決定するロジックを実行し、現在のページの選択を含む DOM の部分を非表示にし、正しい選択を含む DOM の一部を表示します (次のページが表示されているような錯覚)
- 調査が完了すると、ユーザーは [保存] ボタンをクリックし、非同期リクエストを介してすべての選択肢をサーバーに送信します。
- サーバーは選択肢をDBに保存します
このフローは微調整できます (たとえば、ユーザーが行った選択を保存するための中間ステップを追加するなど) が、大きな違いは、表示する選択肢を決定するロジックがクライアント上に存在することです。
$routeProvider に関するあなたの質問から、ユーザーが未完了のアンケートを再開できるようにすることに関心があるのではないかと思われます。そうですか?それとも、以前の選択に基づいてさまざまな選択肢を表示する背後にあるロジックにのみ関心がありますか?
編集
A(a1, a2)、B(b1, b2)、C(c1, c2) という質問 (回答) があるとします。回答 a1 で質問 B が有効になり、回答 a2 で質問 C が有効になります。
最も重要なことは、モデルを正しく設定することです。
scope.survey = {
"A": {
"answers": {
"a1": {
"enables": "B"
"picked": false
},
"a2": {
"enables": "C"
"picked": false
}
}
},
"b": {
"answers": {
"b1": {
"enables": ""
"picked": false
},
"b2": {
"enables": ""
"picked": false
}
}
},
"C": {
"answers": {
"c1": {
"enables": ""
"picked": false
},
"c2": {
"enables": ""
"picked": false
}
}
}
}
次に、HTML の質問を設定して、各質問に正しい「選択された」プロパティを指す ng-show が含まれるようにします。たとえば、2 番目の質問を囲む div には ng-show = "survey.a.answers.a1.picked" が含まれます。
ユーザーの入力内容に応じて survey.a.answers.a1.picked の値を設定するのは難しい部分です。その方法はまだわかりません!