2016-05-18 13 views
0

Ich möchte durch folgende json durchlaufen und erstellen Sie eine dynamische Form ,. Aber, sein Schlüssel und sein Wert sind nicht dasselbe. Wie wiederhole ich es in JS?Iterieren durch Objekt in AngularJs

["register_form", 
 
    { 
 
     "name":{ 
 
     "fielde":"textfield", 
 
     "description":"" 
 
     }, 
 
     "pass":{ 
 
     "pass1":{ 
 
      "field":"password" 
 
     }, 
 
     "pass2":{ 
 
      "field_type":"password" 
 
     } 
 
     }, 
 
     "mail":{ 
 
     "field":"textfield", 
 
     "description":"" 
 
     }, 
 
     "field_first_name":{ 
 
     "field_type":"textfield", 
 
     "description":"" 
 
     } 
 
     
 
    } 
 
]

keine dieser Arbeiten:

//Get the size of object = no. of fileds to be created 
 
var size = Object.keys(response[1]).length; 
 
console.log("Size..." + size); 
 

 
console.log("Keys.." + Object.keys(response[1])); 
 
var keys = []; 
 
var model = []; 
 
var label = []; 
 
keys.push(Object.keys(response[1])); 
 

 
for(var i=0;i<keys.length;i++) { 
 
    angular.forEach(response[1].keys[i], function(key, value){ 
 
    console.log(key + "..." + value);    
 
}); 
 
     

+0

Versuchen Haben Sie for..in-Schleife versucht, durch das Objekt zu iterieren? – Avinash

+0

Ich habe es getan, aber nicht in der Lage, Schlüssel und seinen Wert zu holen. e, g ,: Ich möchte "name" und seinen Wert holen - ein anderes obj mit Feld und Beschreibung als Schlüssel und resp-Werte davon – Smitha

+0

wie viele Felder müssen erstellt werden, 5? Ihre Datenschlüssel sind nicht konsistent. Sie haben (field, field, field_type). Sind sie Tippfehler? Sie haben auch verschachtelte Objekte in "pass", ist das auch beabsichtigt? –

Antwort

1

Sie können wie diese es mit Vanilla Javascript tun:

for (key in response[1]){ 
console.log(key) 
}; 

JSFiddle

+0

nicht über '.hasOwnProperty()' überprüfen –

0

Aktualisiert

Ich denke, das ist das, was Sie brauchen. Sie können die Ausgabe beliebig formatieren.

var data = { 
 
     "name":{ 
 
     "fielde":"textfield", 
 
     "description":"" 
 
     }, 
 
     "pass":{ 
 
     "pass1":{ 
 
      "field":"password" 
 
     }, 
 
     "pass2":{ 
 
      "field_type":"password" 
 
     } 
 
     }, 
 
     "mail":{ 
 
     "field":"textfield", 
 
     "description":"" 
 
     }, 
 
     "field_first_name":{ 
 
     "field_type":"textfield", 
 
     "description":"" 
 
     } 
 
    }; 
 
function toArray(obj) { 
 
    var result = [];var passName;var tempArray = []; 
 
    for (var prop in obj) { 
 
     var value = obj[prop]; 
 
     if (typeof value === 'object') { 
 
       $('#myForm').append("<br/><b>[[" + prop +"]]</b><br/>"); 
 

 
      if ($.isNumeric(prop)) { 
 
       passName = name + "[" + prop + "]"; 
 
      } else { 
 
       passName = name + "['" + prop + "']"; 
 
      } 
 
      tempArray = toArray(value, passName); 
 
      $.each(tempArray, function (key, value) { 
 
       result.push(value); 
 
      }); 
 
     } else { 
 
     $('#myForm').append("<label>" + prop +"</label> : <span>" + obj[prop] + "</span><br/>"); 
 
      result.push(name + "['" + prop + "']"); 
 
     } 
 
    } 
 
    return result; 
 
} 
 

 
toArray(data);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="myForm"> 
 

 
</div>

+0

var arr = Object.keys (Antwort) .map (Funktion (k) {Antwort [k]}); versuchte das auch, keine große Hilfe! – Smitha

+0

@Smitha, überprüfen Sie bitte die aktualisierte Antwort. – vohrahul

1

Diese

var jimApp = angular.module("mainApp", []); 
 

 
jimApp.controller('mainCtrl', function($scope, $sce){ 
 
$scope.user = {}; 
 
    $scope.register_form = {"name":{ 
 
         "field_type":"text", 
 
         "description":"" 
 
         }, 
 
         "pass1":{ 
 
          "field_type":"password" 
 
         }, 
 
         "pass2":{ 
 
          "field_type":"password" 
 
         }, 
 
         "mail":{ 
 
         "field_type":"text", 
 
         "description":"" 
 
         }, 
 
         "field_first_name":{ 
 
         "field_type":"text", 
 
         "description":"" 
 
         } }; 
 
    $scope.formData = { name : "" }; 
 
    $scope.html = ""; 
 
    angular.forEach($scope.register_form, function(value, key){ 
 
    $scope.html = $scope.html + "<input type="+ value.field_type +" placeholder="+key+" >"; 
 
    }); 
 
    $scope.trustedHtml = $sce.trustAsHtml($scope.html); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> 
 
<div ng-app="mainApp" ng-controller="mainCtrl"> 
 
    <form> 
 
    <div ng-bind-html="trustedHtml"> 
 
    </div> 
 
    </form> 
 
</div>

+0

Ich möchte in Controller nicht html/tempalte iterieren – Smitha

+0

Was ist die Notwendigkeit, in den Controller zu iterieren? – byteC0de

+0

Ich möchte ein dynamisches Formular erstellen, für das ich verwende - https://github.com/danhunsaker/angular-dynamic-forms – Smitha