{ "questions": [
  {
   "text": "Which colors do you see in the rainbow?",
   "answer": "A",
   "A": "RED",
   "B": "ORANGE",
   "C": "YELLOW",
   "D": "GREEN"
 },
 {
  "text": "What is sanatbek's family name?",
  "answer": "C",
  "A": "Saidov",
  "B": "Muhammadlatipov",
  "C": "Matlatipov",
  "D": "Boboyev"
 },
 {
  "text": "How many members does this company have?",
  "answer": "C",
  "A": "3",
  "B": "8",
  "C": "9",
  "D": "2"
 }
 ]
}

Este es mi archivo JSON y necesito obtener la cantidad de preguntas en AngularJS de esta manera:

function getQuestionCount() {
    return $scope.questions.length;
}

Aquí $scope.questions se declara en el controlador: He intentado varias soluciones como

  1. return Object.keys($scope.questions).length esto es returning value: 6; después de mostrar console.log($scope.questions). Comprendí que se trataba de varias propiedades de mi objeto analizado.
  2. Luego, después de pensar un poco, probé esto return $scope.questions.data.questions.length; esto está funcionando. Sin embargo, aparece el siguiente error en mi consola.

Aquí está mi mensaje de error:

Error message

TypeError: Cannot read property 'data' of undefined.
0
mr.sanatbek 28 oct. 2017 a las 10:14

3 respuestas

La mejor respuesta

Desde el ScreenShot que compartió, se entiende que realizó una llamada HTTP GET para recuperar los datos. Después de que su llamada se complete con éxito, puede establecer la longitud de las preguntas en una variable de alcance.

$http({
  method: 'GET',
  url: '/someUrl'
}).then(function successCallback(response) {
    $scope.questionsLenght = response.data.questions.length;
  }, function errorCallback(response) {
    // called asynchronously if an error occurs
    // or server returns response with an error status.
  });
1
Raghu 28 oct. 2017 a las 07:29

Si en su controlador configura su cadena json como

  $scope.questions = {
  "questions": [
  {
      "text": "Which colors do you see in the rainbow?",
      "answer": "A",
      "A": "RED",
      "B": "ORANGE",
      "C": "YELLOW",
      "D": "GREEN"
  },
 {
     "text": "What is sanatbek's family name?",
     "answer": "C",
     "A": "Saidov",
     "B": "Muhammadlatipov",
     "C": "Matlatipov",
     "D": "Boboyev"
 },
 {
     "text": "How many members does this company have?",
     "answer": "C",
     "A": "3",
     "B": "8",
     "C": "9",
     "D": "2"
 }
    ]
}; 

Tratar

 $scope.questions.questions.length;

Como el nombre de la matriz dentro de su cadena json es preguntas

0
NTP 28 oct. 2017 a las 07:24

Puedes obtener longitud usando for loop:

for (var i = 0; i < $scope.questions.length; i++) {
   $scope.data.push(angular.copy(types[i]));
  }
1
piet.t 30 oct. 2017 a las 09:04