2015-06-22 81 views
0

我有以下的控制器,基本上調用一個HTTP GET服務和數據分配給show_data範圍變量自定義指令來填充動態選擇框AngularJS

.controller('forms_controller', function($scope, Form) { 

Form.get().then(function(data){ 
    $scope.show_data = data; 
}); 


}); 

然後scope.show_data被推到了這一觀點。 。

<div ng-repeat="(key, value) in show_data | orderBy:'key' " > 
<div ng-switch on="value.Type" > 
    <div ng-switch-when="attributes" > 
     <div ng-repeat="(key2, value2) in value | orderBy:'key' "> 

      <div ng-switch-when="Date" >        
       <label class="item item-input"> 
        <span class="input-label">{{value2.Label}}</span> 
        <input identifier="{{value2.Identifier}}" type="date"> 
       </label> 
      </div> 

      <div ng-switch-when="Select" > 
       <label class="item item-input item-select"> 
        <div class="input-label"> 
        {{value2.Label}} 
        </div> 
         <select codelist="{{value2.CodeList}}" identifier="{{value2.Identifier}}" > 
        </select> 
       </label> 
      </div> 

     </div> 
    </div> 
</div> 

這基本上檢查基於輸入類型的數據,並吐出基於數據的不同表單元素。我的問題是我面對的是與選擇框...每個選擇框都有一個id [codelist在這種情況下] ng-options應該顯示,但我首先需要做另一個http獲取調用來獲取此填充ng選項之前的數據...
請注意,每個表單可能會有多個選擇框。

我在想用某種自定義指令來達到這個目的嗎?
任何幫助,將不勝感激:)
謝謝

+0

不要使用show_list任何地方 – wvdz

+0

感謝您指出了出來..我現在已經修改後 –

+0

所以這個工作?我不明白問題所在。 – wvdz

回答

0

您的問題是服務器發送你的「不完整」的對象。你需要做額外的獲取請求來「完成」你的對象。

所以這就是你應該做的:在你的控制器中,遍歷你的對象並執行額外的get-requests,並將結果存儲到你可以在你的html中調用value2.items

您不必等到設置$scope.show_data,直到所有數據被提取。一旦附加信息可用,Angular的雙向綁定將同步html。

這樣的事情應該工作。

var n = 0; 
for (;n < data.length; n += 1) { 
    var values = data[n].value 
    var i = 0; 
    for (;i < values.length; i += 1) { 
     // GET based on values[i].CodeList 
     $http.get(...) 
     .success(function (data2) { 
      values[i].items = data2 
      // Retrieveable in HTML as value2.items 
     }); 
    } 
} 
+0

好吧 - 如果我遍歷數據對象並獲取每個選擇框的代碼列表數據。我將如何動態地將數據綁定到每個選擇框? –

+0

@DarrynSmith我添加了一些示例代碼來展示我的意思 – wvdz