Я создаю викторину в Angular и Im, используя заводскую функцию для загрузки базы данных вопросов.Угловое обслуживание не обновляется в контроллере
angular
.module('myQuiz')
.factory('QuestionService', ['$http', '$q', function($http, $q) {
var currentQuestion = 0;
return {
getQuestion: function() {
var def = $q.defer();
$http.get("quizdb.json")
.success(function(data) {
// resolve the data by returning the question, choices and correctanswer in an object
def.resolve({
totalQuestions: data.allQuestions.length,
question: data.allQuestions[currentQuestion].question,
choices: data.allQuestions[currentQuestion].choices,
correctAnswer: data.allQuestions[currentQuestion].correctAnswer
});
})
.error(function() {
def.reject("failed to retrieve questions");
});
return def.promise;
},
getCurrentQuestion: function() {
return currentQuestion;
},
nextQuestion: function() {
(currentQuestion >= 0) ? currentQuestion += 1 : false;
},
prevQuestion: function() {
(currentQuestion < 0) ? false : currentQuestion -= 1;
}
};
}]);
Когда пользователь нажимает кнопку «Далее», на следующей фабрике будет вызываться nextQuestion. Это правильно обновляется на заводе, но я не знаю, как получить актуальное значение в моем контроллере. Я не думаю, что $ watch будет работать, и функция тайм-аута кажется немного взломанной. Может быть, лучше использовать службу значений для хранения переменной currentQuestion?
Дополнительный вопрос: следует ли хранить логику вопроса на текущей фабрике или лучше создать отдельный?
Это может показаться глупым, но как я могу получить возвращаемое значение? \t \t функция addQuestion() { \t \t \t vm.selected = ложь; \t \t \t QuestionService.nextQuestion(); \t \t \t getTheCurrentQuestion(); \t \t} – idontknow
$ scope.variable_name = QuestionService.nextQuestion(); – Yeager
Но это был мой первоначальный вопрос, он будет отражать его только один раз в контроллере, потому что он вызван только один раз. Он будет возвращать 1 каждый раз. Я вообще не понимаю этого поведения. Сервис value мог бы работать, но он не позволяет увеличивать число. – idontknow