2017-08-11 130 views
1

我正在嘗試基於服務器響應創建動態表單。例如,我有8個按鈕,點擊時每個按鈕都會生成不同輸入類型的問卷。每個類別的問題都是從後端抓取的,每個問題都有它的類型,可以是無線電,選擇等。基於這些信息,如何根據用戶的按鈕生成特定問題集的表單點擊。我想到的一件事是使用ng-hide/show取決於被點擊的類別,但這將是一個非常糟糕的做法,因爲這8個類別共有64個問題(每個8個)。任何幫助,將不勝感激。謝謝!!基於服務器響應在Angular中創建動態表單

的響應是這樣的:

{ 
    "code": 200, 
    "data": { 
    "id": "598ca3dac405bc378fc21764", 
    "question_set_number": "QS1", 
    "questions": [ 
     { 
     "answers": [ 
      "Answer 1", 
      "Answer 2", 
      "Answer 3" 
     ], 
     "id": "59839d20c405bc411540a11d", 
     "question_number": "Q1", 
     "question_text": "Test question", 
     "type": "radio" 
     }, 
     { 
     "answers": [ 
      "Answer 1", 
      "Answer 2", 
      "Answer 3" 
     ], 
     "id": "59839d2dc405bc411540a11e", 
     "question_number": "Q2", 
     "question_text": "Test question", 
     "type": "check" 
     } 
    ] 
    }, 
    "message": "successful", 
    "status": "success" 
} 
+0

我可以爲你做一個例子,但你可以循環輸入,並根據服務器的響應動態分配它們的類型。如果你認爲這是你需要的,我有一個現有的例子[這裏](https://github.com/kauffmanes/acoma-data-app/blob/master/public/newFindForm/new-find-form.html)。 – kauffee000

+0

您的回覆與我的相似嗎?我只是編輯我的帖子,如果你可以看看。謝謝!! – BleachedAxe

+0

是的,它非常相似。我正在爲你準備一個垃圾箱。這是8種形式中的1種的反應嗎?每按一下按鈕點擊一個新的服務電話的問題? – kauffee000

回答

1

可以通過基於所述服務器輸入形式輸入環和動態顯示它們是這樣的(工作實施例here)。

HTML

<!-- click a button to see a form --> 
<button data-ng-click="getQuestions('qs1')">Form 1</button> 
<button data-ng-click="getQuestions('qs2')">Form 2</button> 
<button data-ng-click="getQuestions('qs3')">Form 3</button> 

<form action=""> 
    <input data-ng-repeat="item in questions" type={{item.type}}> 
</form> 

控制器

app.controller('MainCtrl', ['$scope', function ($scope) { 

    $scope.questions = []; 

    $scope.getQuestions = function (category) { 

    //make service call based on category and return questions 
    //$scope.questions = result of service 

    //stubbed for example: 
    $scope.questions = [ 
     { 
     "answers": [ 
      "Answer 1", 
      "Answer 2", 
      "Answer 3" 
     ], 
     "id": "59839d20c405bc411540a11d", 
     "question_number": "Q1", 
     "question_text": "Test question", 
     "type": "radio" 
     }, 
     { 
     "answers": [ 
      "Answer 1", 
      "Answer 2", 
      "Answer 3" 
     ], 
     "id": "59839d2dc405bc411540a11e", 
     "question_number": "Q2", 
     "question_text": "Test question", 
     "type": "checkbox" //this was check, needed to be checkbox - either update service or manipulate it on your end 
     } 
    ]; 

    }; 


}]); 

這樣做只是這顯示動態顯示的輸入,而只有寫入一個輸入場的概念。如果服務發送它,您可以添加更多內容。如果您要處理多種輸入類型,我建議您製作一個簡單的動態輸入指令來處理所有這些邏輯,然後簡單地將該類型傳遞給指令。我有一個工作示例here,但這就是這個概念。我也可以用這個邏輯來幫助你。

+0

非常感謝! :)我現在可以用單一輸入類型生成問題,但我只是想知道這對於多種輸入類型是不是也適用?當你從服務器綁定類型時。爲什麼我需要一個指令?再次感謝!! – BleachedAxe

+1

我想你不需要如果你保持這個簡單。我爲我的項目使用了一個指令,因爲我有textareas,文本,日期等等,有些是用值自動填充的。它變得非常大,所以我有理由把它分解成一個指令。但沒有必要! – kauffee000

+0

有一件事,因爲這些輸入類型是在運行時生成的,您如何將它們分配給ng-model以提交到後端?每次問題或答案都會有所不同,並可能代表不同的對象。你如何處理所有這些方法?謝謝! – BleachedAxe