2014-11-13 2 views
0

Я использую nodeJS поэтому сервер будет посылать следующий объект JSON в контроллер, выполнив:Как я могу получить доступ значения в JSON в AngularJS

data = { 
    "question": "theQuestion", 
    "answer": "theAnswer" 
}; 
res.json(data); 

Тогда в контроллере, я хочу, чтобы манипулировать переменные, как:

data = QA.get(); 
$scope.q = data[question] + "Some additional info here"; 

QA это услуга определяется как:

angular.module('questionServices', ['ngResource']) 
.factory('QA', function ($resource) { 
    return $resource('/qa'); 
}); 

Однако сообщение об ошибке всегда говорит мне, что data[question] не определено. Каков правильный способ доступа к стоимости? Я пробовал data.question. Это тоже не работает.

Я знаю, что могу просто показать значения json, используя ng-repeat в html, но я хочу быть более гибким, управляя значениями.

+0

у вас есть скрипка? Вы проверили, что такое «данные»? Что возвращает 'QA.get'? Является ли 'QA.get' async? –

+0

Можете ли вы опубликовать функцию QA service get? –

+0

Я пробовал console.log (данные) и в html {{console | json}}. консоль дает мне такие вещи, как e {$ обещают: Promise, $ resolved: false, ...}, и где-то там есть мой объект. {{console | json}} дает абсолютно нормальный результат: {«question»: «QuestionHere», «answer»: «answerHere»}. Странно, используя ng-repeat, чтобы продемонстрировать значения полностью, но доступ к значению в контроллере просто не работает. –

ответ

1

Кажется, вам функцию QA вы используете $ HTTP или $ ресурсов, чтобы получить ответ AJAX.

Если вы возвращаете $ http.get/$ http.post в вас службе контроля качества, вы можете использовать этот код для обработки ответа JSon:

QA.get().success(function(data){ 
    console.log(data); 
    console.log(data.answer); 
}).error(functoin(data){ 
    //handle error here. 
}); 

Если вы используете $ ресурса в службе контроля качества, то вы можете использовать этот код, чтобы справиться с этим:

QA.get().$promise.then(function(data){ 
    console.log(data); 
    console.log(data.answer); 
}).then(function(error){ 
    //handler error here. 
}); 

Here is $http document.

Here is $resource document.

P.S вам нужно понять в ajax, javascript обрабатывает запрос в async. Это означает, что, когда Exec этот код:

$scope.data = QA.get() 
console.log($scope.data); // QA.get() send a http request. Now data is still promise object. 

вы не можете получить этот ответ немедленно. Поэтому, если вы попытаетесь зарегистрировать данные или воспользуйтесь console.log(data.answer), чтобы получить data.answer. вы получите undefined

Однако у вас есть html-представление. Данные можно получить с помощью {{data|json}}. Это потому, что угловые будут смотреть ваши данные. И как только данные (объект ресурса $ resource) изменяются (означает, что http-запрос завершен), Angular автоматически отобразит ваше представление.

Вот почему, на ваш взгляд, вы можете получить data.answer. Но в вашем контроллере вы не можете.

0

$ scope.data = QA.get();
console.log (данные);

или в шаблоне:

{{data | json}}

Это даст вам подсказку

+0

Это не то, что я хочу. Я уже успешно отобразил данные. Я хочу, чтобы манипулировать значениями в контроллере для других целей. Я использовал console.log (данные), кажется, что есть много других атрибутов, таких как $ prom и прочее. Я настолько смущен, вероятно, я не могу этого сделать. –

+0

Скажите, используя {{данные | json}}, у меня есть {«вопрос»: «QuestionHere», «answer»: «answerHere»}. Но тогда, если я делаю $ scope.ans = data.answer или $ scope.ans = data ["answer"], ничего не появляется, а console.log ($ scope.ans) дает неопределенный. : / –

Смежные вопросы