2015-05-22 3 views
5

Я новичок в AngularJS. Я просто хочу загрузить данные файла JSON в переменную, которая находится на заводе.Хранить данные JSON в переменной

myApp.factory('quizFactory', function() { 
    var questions = [ 
     { 
      "setId":1, 
      "question":"What is the value of the 7 in the following number? 850,765", 
      "options": ["70", "7", "7000", "700"], 
      "answer": 3 
     }, 
     { 
      "setId":2, 
      "question":"Is 7 & 9 even or odd?", 
      "options": ["Even", "Odd", "Can't Say", "Dont know"], 
      "answer": 1 
     }, 
     { 
      "setId":3, 
      "question":"In the number 5,281,946 what is the value of the 3rd place?", 
      "options": ["100", "10,000", "1,000,000", "1,000"], 
      "answer": 0 
     }, 
     { 
      "setId":4, 
      "question":"Is 12 + 50 even or odd?", 
      "options": ["Even", "Odd", "Can't Say", "Dont know"], 
      "answer": 0 
     }, 
     { 
      "setId":5, 
      "question":"What does the 3 represent in the number below? 3051", 
      "options": ["3", "30", "300", "3000"], 
      "answer": 3 
     } 
    ]; 

    return { 
     getQuestion: function(id) { 
      if(id < questions.length) { 
       return questions[id]; 
      } else { 
       return false; 
      } 
     } 
    }; 
}); 

Приведенный выше код хранится в файле app.js, а мой JSON-файл аналогичен указанному выше.

[ 


{ 
     "setId":1, 
     "question":"What is the value of the 7 in the following number? 850,765", 
     "options": ["70", "7", "7000", "700"], 
     "answer": 3 
    }, 
    { 
     "setId":2, 
     "question":"Is 7 & 9 even or odd?", 
     "options": ["Even", "Odd", "Can't Say", "Dont know"], 
     "answer": 1 
    }, 
    { 
     "setId":3, 
     "question":"In the number 5,281,946 what is the value of the 3rd place?", 
     "options": ["100", "10,000", "1,000,000", "1,000"], 
     "answer": 0 
    }, 
    { 
     "setId":4, 
     "question":"Is 12 + 50 even or odd?", 
     "options": ["Even", "Odd", "Can't Say", "Dont know"], 
     "answer": 0 
    }, 
    { 
     "setId":5, 
     "question":"What does the 3 represent in the number below? 3051", 
     "options": ["3", "30", "300", "3000"], 
     "answer": 3 
    } 
]; 

Я пробовал this question тоже.

ответ

3

Вы можете использовать $http для чтения json-файла. Например.

$http.get('someFile.json').success(function(data) {  
     questions = data; 
    });  
+0

Я заменил свой файл JS сверху myApp.factory ('quizFactory', ['$ http', function ($ http) { \t $ http.get ('ques.json'). Success (function (data) { var questions = data; }); }); но все еще не работает, он не может загрузить json-файл –

+0

Он должен работать, может быть, ваш json-файл не в нужном месте. Вот рабочая демонстрация http://plnkr.co/edit/PpRvBhbZ9LHT8EQeUV2a?p=preview – sol4me

+0

В файле app.js, если я меняю app.controller на app.factory, он не работает. –

0

Вы можете переопределить ваш завод, как это:

angular.module('yourmodule') 
.factory('jsonResourceService', ['$http', 
function($http) { 
    var jsonResourceService = {}; 

    jsonResourceService.load = function(callback) { 
    $http.get('path/data.json').success(function(data) { 
     callback(data); 
    }); 
    return jsonResourceService; 


} 
]); 

и вызывать его из контроллера, как это:

 $scope.objectsArray = []; 

    jsonResourceService.load(function(data) { 
$scope.objectsArray; 
}); 
+0

зачем нужен цикл forEach? вместо этого вы можете напрямую хранить данные в объекте массива. – Hardy

+0

Отредактировано сейчас, в моем случае я делал дополнительную обработку, прежде чем добавлять ее в массив. –

0

Если я хочу, чтобы добавить данные в формате JSON переменной фабрики по какой-то конкретной просьбе внутри контроллера, что вы имели в виду, тогда $http является предпочтительным:

 appmodule.controller('appCtrl', ['$http','quizFactory',function($http,quizFactory){ 
     $http('somefile.json').success(function(data){ 
      quizFactory.questions=data; 
     } 
    }) 

Здесь обратите внимание, что вы должны зависеть от завода , и нет необходимости вручную анализировать данные, Угловой будет автоматически следить за ним.