2016-05-18 143 views
0

我想遍历下面的json并创建一个动态表单。但是,它的关键和价值都不一样。那么我如何在JS中迭代它?在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":"" 
 
     } 
 
     
 
    } 
 
]

没有这些工作的:

//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

您是否尝试过for..in循环通过对象迭代? – Avinash

+0

我做到了,但无法取得关键字及其价值。 e,g,:我想获取“name”和它的值 - 另一个obj与字段和描述作为键和它的resp值 – Smitha

+0

需要创建多少个字段,5?你的数据键不一致..你有(field,fielde,field_type)。他们是否有错别字? 你也在“通过”里面有嵌套的对象,那也是有意的吗? –

回答

1

你可以用香草的JavaScript做这样的:

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

JSFiddle

+0

不要忘了'.hasOwnProperty()'检查 –

0

更新

我觉得这是你所需要的。您可以以任何您想要的方式格式化输出。

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(response).map(function(k){response [k]});也尝试了这一点,没有太大的帮助! – Smitha

+0

@Smitha,请检查最新的答案。 – vohrahul

1

尝试这个

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

我想在控制器中迭代不html/tempalte – Smitha

+0

在控制器中迭代需要什么? – byteC0de

+0

我想创建一个动态表单,我正在使用 - https://github.com/danhunsaker/angular-dynamic-forms – Smitha