1

Given a json of array of objects, how could one display it using a ng-repeat dynamically? error key is static / always remain the same. Just the values of error changes. So if I have the password field errored-out then I'll have password key instead on the error

{ "error": { "firstName": { "0": "The first name field is required.", "1": "The first name field must have 2-5 characters." }, "lastName": { "0": "The last name field is required." } } } 

.

{ "error": { "password": { "0": "The password field is required." } } } 

I tried doing:

<ul ng-repeat="message in errormessage"> <li ng-repeat="(k,v) in message"> {{k}} - {{v}} </li> </ul> 

But it displays this instead:

0 - [ 0 - ] 
5
  • Your JSON is not valid.
    – Mamun
    CommentedMar 20, 2017 at 3:27
  • How come it is not a valid JSON?
    – basagabi
    CommentedMar 20, 2017 at 3:28
  • Just try it with a online validator.
    – Mamun
    CommentedMar 20, 2017 at 3:29
  • Try it again. There are 2 json there. Not one.
    – basagabi
    CommentedMar 20, 2017 at 3:30
  • That's right then.
    – Mamun
    CommentedMar 20, 2017 at 3:31

4 Answers 4

2

angular.module('app', []) .controller('SampleCtrl', function($scope) { $scope.errormessage = { "error": { "firstName": { "0": "The first name field is required.", "1": "The first name field must have 2-5 characters." }, "lastName": { "0": "The last name field is required." }, "passowrd": { "0": "The password field is required." } } }; });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="app" ng-controller="SampleCtrl"> <ul ng-repeat="message in errormessage"> <li ng-repeat="(k,v) in message"> <b>{{k}}:</b><br> <ul> <li ng-repeat="err in v"> {{err}} </li> </ul> </li> </ul> </div>

3
  • Seems weird that it is returning a string instead of an array. Something like this {"error":{"firstName":{"0":"The first name field is required.","1":"The first name field must have 2-5 characters."},"lastName":{"0":"The last name field is required."},"passowrd":{"0":"The password field is required."}}}
    – basagabi
    CommentedMar 20, 2017 at 4:11
  • And having this error Error: ngRepeat:dupes Duplicate Key in Repeater using the track by $index displays each letter as an array though.
    – basagabi
    CommentedMar 20, 2017 at 4:12
  • it sounds like you are looping through a string instead of valid object. You may need to parse the JSON string. use JSON.parse(YOUR_ERROR_RESPONSE)CommentedMar 20, 2017 at 5:13
0

Make sure you are using the ng-repeat on the right object. You have:

ng-repeat="message in errormessage" 

and the content of errormessage seems to be "[]". See http://jsfiddle.net/hgk6vsqv/

1
  • Better to explain what is needed to make it work, than to set up a demo of something not working. They already have a non-working versionCommentedMar 20, 2017 at 3:41
0

Some observations :

  • Given a json of array of objects. Your JSON is not an array of Objects.
  • Try this ng-repeat="message in errormessage.error" instead of ng-repeat="message in errormessage"

DEMO

var myApp = angular.module('myApp',[]); myApp.controller('MyCtrl',function($scope) { $scope.errormessage = { "error": { "firstName": { "0": "The first name field is required.", "1": "The first name field must have 2-5 characters." }, "lastName": { "0": "The last name field is required." } } } });
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script> <div ng-app="myApp" ng-controller="MyCtrl"> <ul ng-repeat="message in errormessage.error"> <li ng-repeat="(k,v) in message"> {{k}} - {{v}} </li> </ul> </div>

    0

    EDIT

    I think the first thing you have to consider is to normalize your json if you have control over that and represent it like this

    $scope.errormessage = { "error": { "firstName": { "0": "The first name field is required.", "1": "The first name field must have 2-5 characters." }, "lastName": { "0": "The last name field is required." }, "passowrd": { "0": "The password field is required." }, "mail": { "0": "The first name field is required.", "1": "The first name field must have 2-5 characters." }, "newsletter": { "0": "The newsletter field is required." }, "address": { "0": "The address field is required." } } } 

    Why this because you cant have two field named error on a same object or array. After this the first solution provided must work

    <div ng-app="app" ng-controller="SampleCtrl"> <ul ng-repeat="message in errormessage"> <li ng-repeat="(k,v) in message"> <b>{{k}}:</b><br> <ul> <li ng-repeat="err in v"> {{err}} </li> </ul> </li> </ul> </div> 
    0

      Start asking to get answers

      Find the answer to your question by asking.

      Ask question

      Explore related questions

      See similar questions with these tags.