Итерация по объекту в AngularJs

0

Я хочу повторить следующий json и создать динамическую форму. Но, как его ключ, так и ценность не одинаковы. Итак, как это сделать в JS?

["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
    Вы пробовали цикл в ... для итерации по объекту?
  • 0
    Я сделал это, но не смог получить ключ и его значение. e, g,: я хочу получить "имя" и его значение - другой объект с полем и описанием в качестве ключей и соответственно его значений
Показать ещё 2 комментария
Теги:
arrays

3 ответа

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
  • 0
    Что нужно для перебора в контроллере?
Показать ещё 1 комментарий
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]}); попробовал это тоже, никакой помощи!
  • 0
    @ Смита, пожалуйста, проверьте обновленный ответ.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню